2009-01-18 179 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