2010-04-16 4 views
2

У меня есть класс ViewModel для инкапсуляции моделей «Персональный» и «Бизнес». Моя проблема в том, что обе модели имеют свойство «Электронная почта», а привязка к модели не может провести различие между ними.Два поля с тем же именем

Я читал, что [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; 
    } 
} 

Как использовать префикс Bind, чтобы исправить это?

+0

Как ваша форма строится? Как это связано? Нужна дополнительная информация, чтобы точно диагностировать проблему с именами. – Jab

ответ

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, значит ли это, что мне нужно создавать элементы ввода для всех моих полей? Что случилось с [Bind (Префикс = ...? –

+0

Я не знаком с Bind (Префикс ... Как вы создаете элементы формы, которые публикуются? – Luke