在HttpPost上绑定嵌套模型和MVC3

时间:2011-09-25 12:36:57

标签: asp.net-mvc-3 http-post actionresult editorfor editorformodel

我是MVC3的新手。

我在表单上有一个提交按钮,我想绑定一个包含2-3个嵌套对象模型的模型,里面有很多属性。

有没有办法在不使用EditorFor的情况下绑定这些嵌套对象;因此,当我提交表单时,我将对正在返回的模型采用ActionResult(对象模型),嵌套对象使用其值进行建模,而不必在html上实现隐藏值或表单?

2 个答案:

答案 0 :(得分:2)

DefaultModelBinder按惯例工作,因此要使其工作,表单字段必须遵守MVC命名约定。

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

请注意,这会在MVC3中创建一些其他问题,其中最重要的是DropDownLists和其他一些项目的不引人注意的验证呈现可能会失败。

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

答案 1 :(得分:0)

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