ASP.NET MVC - 表单和模型绑定器中的多个模型

时间:2009-01-18 18:37:45

标签: asp.net-mvc model-binders

我有一个需要填充2个模型的表单。通常我在表单post post上使用ModelBinderAttribute,即

    [Authorize]
    [AcceptVerbs("POST")]
    public ActionResult Add([GigBinderAttribute]Gig gig, FormCollection formCollection)
    {
       ///Do stuff
    }

在我的表单中,字段的名称与模型属性相同......

然而,在这种情况下,我有2个不同的模型需要填充。

我该怎么做?有任何想法吗?有可能吗?

3 个答案:

答案 0 :(得分:9)

实际上......最好的方法就是这样做:

public ActionResult Add([GigBinderAttribute]Gig gig, [FileModelBinderAttribute]File file) {

}

您可以使用多个属性!

答案 1 :(得分:8)

在这种情况下,我倾向于制作单一的模型类型来包含所涉及的各种模型:

class AddModel
{
     public Gig GigModel {get; set;}
     public OtherType OtherModel {get; set;}
}

...并绑定那个。

答案 2 :(得分:0)

可以使用UpdateModel或TryUpdateModel方法执行此操作。您可以传递模型,要绑定的模型,要绑定到该模型的项的前缀和表单。例如,如果您的Item模型具有“Item.Value”的表单变量,那么您的更新模型方法将是:

UpdateMode(modelObject, stringPrefix, formCollection);

如果您正在使用实体框架,则值得指出的是UpdateModel方法在某些情况下并不总是有效。尽管如此,它确实对POCO有效。