为了账号安全,请及时绑定邮箱和手机立即绑定

获取传递给部分视图的嵌套复杂对象的值。

获取传递给部分视图的嵌套复杂对象的值。

海绵宝宝撒 2019-07-08 12:30:07
获取传递给部分视图的嵌套复杂对象的值。我有一个ViewModel,它的成员之一是一个复杂的对象。复杂对象有4个属性(所有字符串)。我正在尝试创建一个可重用的部分视图,在其中我可以传递复杂的对象,并让它为其属性生成带有html帮助器的html。一切都很好。但是,当我提交表单时,模型绑定器没有将值映射回ViewModel的成员,因此在服务器端没有得到任何信息。如何将用户键入的值读入复杂对象的html帮助程序中。视图模型public class MyViewModel{      public string SomeProperty { get; set; }      public MyComplexModel ComplexModel { get; set; }}MyComplexModelpublic 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”。到部分视图(TextBox)中的所有控件名称,以便它映射到嵌套对象,但我不能将ViewModel类型传递给部分视图以获得额外的层,因为它需要是通用的,才能接受几种ViewModel类型。我可以用javascript重写name属性,但在我看来,这似乎过于简单了。我还能怎么做呢?编辑2:我可以用新的{name=“ComplexModel.Name”}静态地设置name属性,所以我认为我在做生意,除非有人有更好的方法?
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我遇到了同样的情况,在这些信息丰富的文章的帮助下,我的部分代码更改为在由分部视图生成的输入元素中具有前缀。

我使用了Html.PartialHelper,为Html.分部构造函数提供了ModelType的部分视图名称和对象,以及一个带有HTML字段前缀的ViewDataDictionary对象的实例。

这将导致GET对“主视图”的“xyz url”的请求,并在其中使用前缀生成的输入元素呈现部分视图,例如,前面的name=“title”现在相应的HTML元素中变为name=“MySubTypet.itle”,对于表单输入元素的其余部分也是相同的。

当向“xyz url”发出POST请求时出现了问题,希望将填写的表单保存到我的数据库中。但是MVC模型绑定器并没有将我发布的模型数据绑定到表单值中,而且ModelState也丢失了。视图数据中的模型也将变为空。

最后,我尝试使用TryUppdateModel方法更新发布形式的模型数据,该方法采用模型实例和先前传递给部分视图的html前缀,现在可以看到模型与值绑定,模型状态也存在。

请让我知道这个方法是好的还是有点多样化的!


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 417 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信