我是 MVC3 的新手。
我在表单上有一个提交按钮,我想绑定一个模型,该模型具有 2-3 个嵌套对象模型,其中包含许多属性。
有没有办法在不使用 EditorFor 的情况下绑定这些嵌套对象;这样当我提交表单时,我将在返回的模型上采用 ActionResult(Object model),嵌套对象模型及其值,而不必在 html 上实现隐藏值或表单?
我是 MVC3 的新手。
我在表单上有一个提交按钮,我想绑定一个模型,该模型具有 2-3 个嵌套对象模型,其中包含许多属性。
有没有办法在不使用 EditorFor 的情况下绑定这些嵌套对象;这样当我提交表单时,我将在返回的模型上采用 ActionResult(Object model),嵌套对象模型及其值,而不必在 html 上实现隐藏值或表单?
按照DefaultModelBinder
约定工作,因此要使其工作,表单字段必须遵守 MVC 命名约定。
如果您不想使用EditorForModel
创建表单,那么您将不得不为每个字段实现自己的命名约定,并ViewData.TemplateInfo.HtmlFieldPrefix
为每个元素设置。然后,您必须创建一个自定义 ModelBinder 以获取返回的表单,并根据您的命名约定绑定到您的模型。
请注意,这会在 MVC3 中产生一些其他问题,其中最重要的是渲染 DropDownLists 和其他一些项目的不显眼验证可能会失败。
对于一般情况,最好在视图中使用 EditorForModel,并使用 MVC 的现有约定。您可以创建一个特定于每个嵌套模型的视图。Brad Wilson 在本文中很好地概述了该过程。
基本上你需要足够的值来再次识别你的模型。因此,您可以在隐藏字段中使用 Id 以及要更改的所有属性。要重新创建您的模型,只需通过基本参数将 Id 和更改的值传递给您的控制器动作或编写模型绑定器- 恕我直言,这是处理这些情况的最佳方法。