2014-09-01 3 views
0
модели

Моя модель:Как достичь связывания для сложных типов

public class ContactInfo 
     { 

      public IEnumerable<SupplierContact> PriceRequest { get; set; } 
      public IEnumerable<SupplierContact> OrderConfirmation { get; set; } 
      public IEnumerable<SupplierContact> Account { get; set; } 
     } 




public class SupplierContact 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Title { get; set; } 
     public string Email { get; set; } 
     public string MobilePhone { get; set; } 

    } 

и моего действие контроллера

public ActionResult EditContactInfo(ContactInfo contactInfo) 
{ 
// not getting any values here.. 
} 

Вид оказывает как:

@foreach (SupplierContact PriceRequest in Model.PriceRequest) 
       { 
       <tr class=""> 
        <td style="text-align: left;" class="csstd-left">@Html.TextBoxFor(m => PriceRequest.Email)</td> 
        <td class="csstd">@Html.TextBoxFor(m => PriceRequest.MobilePhone)</td> 
        <td class="csstd">@PriceRequest.Title</td> 
        <td class="csstd">@PriceRequest.FirstName</td> 
        <td class="csstd">@PriceRequest.LastName</td>     

       </tr> 
       } 

И я ссылка @model ContactInfo с моей стороны

Однако я могу достичь этого, используя

Request.Form.Get("PriceRequest.Email") 

, но я хочу использовать функцию привязки моделей.

ответ

1

Вы должны использовать for цикл (и вам нужно будет изменить коллекции от IEnumerable до IList к name атрибутов правильно индексироваться

@for (int i = 0; i < Model.PriceRequest.Count; i++) { 
    @Html.TextBoxFor(m => Model.PriceRequest[0].Email) 
    @Html.TextBoxFor(m => Model.PriceRequest[i].MobilePhone) 
} 

В качестве альтернативы вы можете создать EditorTemplate для SupplierContact и использовать

@Html.EditorFor(m => m.PriceRequest) 

Это будет генерировать html как

<input name="PriceRequest[0].Email" ... 
<input name="PriceRequest[0].MobilePhone" ... 
<input name="PriceRequest[1].Email" ... 
<input name="PriceRequest[2].MobilePhone" ... 

т.д.

+0

Спасибо. Мне не хватало способа визуализации элементов управления MVC. –

0

Посмотрите на дисплей и редактор шаблонов. Чем вы можете создать представление под названием SupplierContact. MVC автоматически знает, что показывать, если он видит сложный тип.

Смотрите пример: http://www.asp.net/mvc/tutorials/javascript/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc-part-2

Так создайте папку: DisplayTemplates в папку просмотров. Затем создайте частичный вид под названием SupplierContact. Установите модель частичного представления как поставщикаКонтакт. Создайте ярлыки для отображения и запуска приложения снова.

Для редактирования создайте папку EditorTemplates.

+0

Это будет длительный процесс. –

+0

Длительный процесс? Это делается за 2 минуты. Это то, как это должно быть сделано в MVC. Таким образом, при отображении или редактировании объекта такого типа каждое представление становится одинаковым. –

+0

Я предпочел мой принятый ответ. не против. –

Смежные вопросы