我有一个ViewModel,它有一个复杂对象作为其成员之一。复杂对象有4个属性(所有字符串)。我试图创建一个可重用的局部视图,我可以传入复杂的对象,并使用html助手为其属性生成html。这一切都很好。但是,当我提交表单时,模型联编程序没有将值映射回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”},所以我认为我在做生意,除非有人有更好的方法?
这看起来很有希望。我已经离开了办公室,但是如果我回来并且将其标记为答案,那么明天就会给我一个机会。谢谢。 –
这是完美的!非常感谢。 –
嘘......我无法赞成它,因为它说我必须拥有15个声望。 +1为你虽然只要我得到15代表:) –