【发布时间】:2015-04-22 20:52:09
【问题描述】:
我有一个 ViewModel,它有一个复杂对象作为其成员之一。复杂对象有 4 个属性(所有字符串)。我正在尝试创建一个可重用的局部视图,我可以在其中传递复杂的对象并让它生成带有 html 助手的 html 的属性。这一切都很好。但是,当我提交表单时,模型绑定器不会将值映射回 ViewModel 的成员,因此我不会在服务器端得到任何东西。如何将用户键入的值读取到复杂对象的 html 助手中。
视图模型
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; }
....
}
控制器
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:我可以使用 new { Name="ComplexModel.Name" } 静态设置 name 属性,所以我认为我在做生意,除非有人有更好的方法?
【问题讨论】:
标签: asp.net-mvc model partial-views