4

我是MVC3的新手。在HttpPost上绑定MVC3的嵌套模型

我有一个窗体上的提交按钮,我想绑定一个模型,它有2-3个嵌套对象模型,里面有很多属性。

有没有办法在不使用EditorFor的情况下绑定这些嵌套对象;所以当我提交表单时,我将对正在返回的模型采取ActionResult(Object model),嵌套对象使用它们的值进行模型化,而无需在html上实现隐藏值或表单。

+0

试试我的解决方案https://stackoverflow.com/questions/47644699/how-to-bind-nested-objects-on-httppost-in-asp-net-mvc/47645228#47645228 –

回答

0

基本上,您需要足够的值来再次识别您的模型。因此,您可以在隐藏字段中使用ID以及您想要更改的所有属性。 要重新创建您的模型,只需传递Id并通过基本参数将值更改为您的控制器操作或编写一个model-binder - 恕我直言,这是处理这些情况的最佳方式。

2

DefaultModelBinder按惯例工作,所以为了工作,表单字段必须遵守MVC命名约定。

如果您不想使用EditorForModel创建表单,那么您必须为每个字段实现自己的命名约定,并为每个元素设置ViewData.TemplateInfo.HtmlFieldPrefix。然后,你将不得不创建一个自定义的ModelBinder来获取返回的表单,并根据你的命名约定绑定到你的模型。

请注意,这会在MVC3中创建一些其他问题,其中最重要的是对DropDownLists和其他项目进行不显眼验证的渲染可能会失败。

对于一般情况,最好在您的视图中使用EditorForModel,并使用MVC的现有约定。您可以创建一个特定于每个嵌套模型的视图。 Brad Wilson对this article中的过程给出了很好的概述。