asp.net-mvc – 从传递给局部视图的嵌套复杂对象获取值
|
我有一个ViewModel,它有一个复杂的对象作为其成员之一.复杂对象有4个属性(所有字符串).我正在尝试创建一个可重复使用的部分视图,我可以传入复杂对象,并使用html帮助器为其属性生成html.这一切都很好.但是,当我提交表单时,模型binder不会将值映射回ViewModel的成员,所以我不会在服务器端返回任何东西.我如何读取用户输入复合对象的html帮助器的值. 视图模型 public class MyViewModel
{
public string SomeProperty { get; set; }
public MyComplexModel ComplexModel { get; set; }
}
MyComplexModel public class MyComplexModel
{
public int id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
....
}
调节器 public class MyController : Controller
{
public ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.ComplexModel = new MyComplexModel();
model.ComplexModel.id = 15;
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// model here never has my nested model populated in the partial view
return View(model);
}
}
视图 @using(Html.BeginForm("Index","MyController",FormMethod.Post))
{
....
@Html.Partial("MyPartialView",Model.ComplexModel)
}
部分视图 @model my.path.to.namespace.MyComplexModel @Html.TextBoxFor(m => m.Name) ... 如何在表单提交时绑定此数据,以便父模型包含从局部视图在Web表单上输入的数据? 谢谢 编辑:我已经想到我需要在前面添加“ComplexModel”.在部分视图(文本框)中的所有控件的名称,以便映射到嵌套对象,但是我无法将ViewModel类型传递给部分视图以获取该额外的图层,因为它需要通用才能接受多个ViewModel类型.我可以用javascript重写name属性,但是对我来说似乎是过度贫民窟.我还能怎么做? 编辑2:我可以使用新的{Name =“ComplexModel.Name”}静态设置name属性,所以我认为我有事业,除非有更好的方法? 解决方法您可以将前缀传递给部分使用@Html.Partial("MyPartialView",Model.ComplexModel,new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "ComplexModel" }})
这将使前缀变为控制名称属性,以便< input name =“Name”../u0026gt;将成为< input name =“ComplexModel.Name”../u0026gt;并正确绑定到类型的MyViewModel在回发 编辑 为了使它更容易一些,您可以将其封装在一个html帮助器中 public static MvcHtmlString PartialFor<TModel,TProperty>(this HtmlHelper<TModel> helper,Expression<Func<TModel,TProperty>> expression,string partialViewName)
{
string name = ExpressionHelper.GetExpressionText(expression);
object model = ModelMetadata.FromLambdaExpression(expression,helper.ViewData).Model;
var viewData = new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = name }
};
return helper.Partial(partialViewName,model,viewData);
}
并将其用作 @Html.PartialFor(m => m.ComplexModel,"MyPartialView") (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Html.TextBox条件属性与ASP.NET MVC预览5
- asp.net-mvc – ASP.Net MVC:发送JSON到控制器
- asp.net-mvc – ViewModel中的最佳实践
- ASP.NET MVC:使用LINQ To SQL获取表单复选框到多对数DB as
- asp.net-mvc – 将.html文件渲染为ASP.NET MVC中的视图
- .net – 为什么使用DirectoryEntry对LDAP进行身份验证会间歇
- asp.net – 使用Visual Studio 2017在.NET Core解决方案上没
- asp.net – 如何将转发器绑定到列表以更新绑定的项目? (2种
- asp.net-mvc-3 – 强类型的RadioButtonlist
- ASP.NET拒绝访问该路径
- asp-classic – 使用FileSystemObject的文件权限
- asp.net – 访问asp:从代码背后的内容
- asp.net-mvc – 在请求之间保持/缓存数据 – 常用
- asp.net-mvc-3 – 使用redirectAction和prg模式在
- IIS – CPU使用率在几天内逐渐增加,直到100%
- asp.net-mvc-3 – 从MVC 3中使用Razor View引擎的
- asp.net – ReportViewer控件 – 高度问题
- asp.net-mvc-3 – 如何将现有文件夹与其所有子文
- asp.net-mvc – 从Action写入输出流
- asp.net-mvc – 使用Ninject.Web.Mvc 2.0和ASP.N
