我有一个 ViewModel,它有一个复杂的对象作为其成员之一。复杂对象有 4 个属性(所有字符串)。我正在尝试创建一个可重用的局部 View ,我可以在其中传递复杂的对象并让它生成带有 html 助手的 html 的属性。这一切都很好。但是,当我提交表单时,模型绑定(bind)器不会将值映射回 ViewModel 的成员,因此我在服务器端没有得到任何东西。如何将用户键入的值读取到复杂对象的 html 帮助程序中。
View 模型
public class MyViewModel
{
public string SomeProperty { get; set; }
public MyComplexModel ComplexModel { get; set; }
}
我的复杂模型
public class MyComplexModel
{
public int id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
....
}
Controller
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)
}
局部 View
@model my.path.to.namespace.MyComplexModel
@Html.TextBoxFor(m => m.Name)
...
如何在表单提交时绑定(bind)这些数据,以便父模型包含从部分 View 在 Web 表单上输入的数据?
谢谢
编辑:我发现我需要在前面加上“ComplexModel”。到部分 View (文本框)中我的所有控件名称,以便它映射到嵌套对象,但我不能将 ViewModel 类型传递给部分 View 以获得额外的层,因为它需要是通用的才能接受多个 ViewModel类型。我可以用 javascript 重写 name 属性,但这对我来说似乎过于贫民窟。我还能怎么做?
编辑 2:我可以用 new { Name="ComplexModel.Name"} 静态设置 name 属性,所以我认为我在做生意,除非有人有更好的方法?
最佳答案
如果您使用标签助手,partial
标签助手接受 for
属性,它可以满足您的期望。
<partial name="MyPartialView" for="ComplexModel" />
使用
for
属性,而不是典型的 model
属性,将导致部分中的所有表单字段以 ComplexModel.
命名字首。
关于asp.net-mvc - 从传递给局部 View 的嵌套复杂对象中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808573/