2009-01-18 91 views
6

我有一个需要填充2个模型的表单。通常,我使用ModelBinderAttribute的形式发布动作即ASP.NET MVC - 表单和模型绑定器中的多个模型

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

在我的表单,字段被命名为相同型号的属性...

在这种情况下

但是我需要2个不同的车型填充。

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

回答

9

...其实最好的办法是做这样的:

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

}

您可以使用多个属性!

0

UpdateModel或TryUpdateModel方法可用于执行此操作。您可以通过模型,要绑定的模型,要绑定到该模型的项目的前缀以及表单。例如,如果您的产品型号有“Item.Value”的形式变量,那么你的更新模型的方法是:

UpdateMode(modelObject, stringPrefix, formCollection); 

如果您使用实体框架,这是值得指出的是,该方法的UpdateModel不总是在某些条件下工作。不过,它确实对POCO起到了很好的作用。

+0

是否有可能通过使用属性自动执行此操作? – iasksillyquestions 2009-01-18 23:30:49

8

在这样的情况下,我倾向于做一个单一的模式类型的收官之所涉及的各种机型:

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

...并结合这一点。

+1

您只需确保表单字段名称的前缀为属性的名称,例如Gig.Name,Gig.Date和OtherModel.SomeProperty – superlogical 2009-06-22 10:13:17