asp.net-mvc - 从传递给局部 View 的嵌套复杂对象中获取值

标签 asp.net-mvc model partial-views

我有一个 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/

相关文章:

ajax - ASP.NET MVC 用户控件和撇号正在编码

ruby-on-rails - Ruby on Rails - 具有部分 View 的实例变量的范围

c# - 如何在 Umbraco 7 中启用 umbracoNaviHide

asp.net - 具有通用模型的强类型 View 中的 "Unknown element"

IE 11 及以下版本中的 JavaScript 错误 ") expected "+ AJAX 无法在 IE 11 中工作

model - Angular 库无法导出类 - Angular6

c# - 将匿名类型传递给 MVC ViewData.Model 是否安全?

javascript - Sequelize 模型自定义方法返回未定义

python - 如何获取按字段键入的模型对象的字典

c# - 如何在 ASP.NET MVC 4 中将 View 和局部 View 返回到索引布局?