2010-04-16 106 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

相关问题