2010-04-16 101 views
2

我有一個ViewModel類來封裝「個人」和「業務」模型。我的問題是兩個模型都有一個名爲「Email」的屬性,模型綁定無法區分這兩者。同名的兩個字段

我讀到[Bind(Prefix = ...被用來解決這個問題,但是我一直沒能看到一個關於如何實現這個的簡明例子。

public class BusinessFormViewModel 
{ 
    public Business Business { get; set; } 
    public ContactPerson ContactPerson { get; set; } 

    public BusinessFromView(Business business, ContactPerson contactPerson) 
    { 
     Business = business; 
     ContactPerson = contactPerson; 
    } 
} 

如何使用綁定前綴來解決這個問題?

+0

您的表單是如何構建的?它是如何被綁定的?需要更多信息來準確診斷您的命名問題。 – Jab 2010-04-16 16:09:37

回答

1

我相信,如果張貼的表單元素包含名稱中包含的前綴,綁定將正確完成。這就是模板幫助器(即EditorFor)如何呈現控件,並且我的嵌套視圖模型已被正確綁定。例如,你的情況,你的觀點將有表單元素是這樣的:

... 
<input type="text" name="Business.Email" value="<%=this.Model.Business.Email %>" /> 
... 
<input type="text" name="ContactPerson.Email" value="<%=this.Model.ContactPerson.Email %>" /> 
... 

或者,使用模板助手(在MVC 2):

... 
<%= Html.TextBoxFor(m => m.Business.Email) %> 
... 
<%= Html.TextBoxFor(m => m.ContactPerson.Email) %> 
... 

和你的控制器將簡單地採取BusinessFormViewModel作爲參數,如下所示:

public BusinessFromView(BusinessFormViewModel businessForm) 
{ 
    Business = businessForm.Business; 
    ContactPerson = businessForm.ContactPerson; 
} 
+0

我沒有使用MVC 2,這是否意味着我必須爲我的所有字段創建輸入元素?什麼是處理[綁定(前綴= ...? – 2010-04-16 19:16:27

+0

我不熟悉綁定(前綴... 你目前如何創建張貼的表單元素? – Luke 2010-04-16 22:07:04

相關問題