我是MVC3的新手。
我在一个表单上有一个提交按钮,我想绑定一个有2-3个嵌套的对象模型的模型,里面有很多属性。
有没有办法在不使用EditorFor的情况下绑定这些嵌套对象;这样当我提交表单时,我将在返回的模型上采用ActionResult(对象模型),嵌套的对象模型及其值,而不必在html后面实现隐藏值或表单?
发布于 2011-09-25 20:41:53
基本上,你需要足够的值来再次识别你的模型。因此,您可以使用隐藏字段中的Id和您想要更改的所有属性。要重新创建模型,只需通过基本参数将Id和更改后的值传递给控制器操作,或者编写model-binder - IMHO,这是处理这些情况的最佳方法。
发布于 2011-09-25 22:36:55
DefaultModelBinder是按照约定工作的,所以要让它工作,表单域必须遵循MVC命名约定。
如果不想使用EditorForModel创建表单,则必须为每个字段实现自己的命名约定,并为每个元素设置ViewData.TemplateInfo.HtmlFieldPrefix。然后,您将必须创建一个自定义ModelBinder来获取返回的表单,并根据您的命名约定绑定到您的模型。
请注意,这会在MVC3中产生一些其他问题,其中最重要的是对DropDownLists和其他一些项的隐式验证的呈现可能会失败。
对于一般情况,最好在视图中使用EditorForModel,并使用MVC的现有约定。可以创建特定于每个嵌套模型的视图。Brad Wilson很好地概述了this article中的过程。
https://stackoverflow.com/questions/7545515
复制相似问题