2013-02-12 1 views
0

, как я не знаю, как связывание с вложенными объектами работы позволяют мне объяснить мое затруднительное положение:привязки к списку вложенных объектов

Вот мой класс:

public class DeliveryContactViewModel 
    {   
     public List<DeliveryContact> Contacts;   
     public string Name { get; set; } 
    } 

    public class DeliveryContact 
    { 

     public string ContactType { get; set; } 
     public string ContactAddress { get; set; } 
     public List<bool> Reasons { get; set; } 
    } 

ОК, так что ничего особенного здесь экстра ...

Давайте решать View часть сейчас:

Моя идея состояла в том, чтобы сделать форму (псевдокод ниже)

<form action="/path/to/action" id="frm-contact" method="post"> 
    <input id="someID" name="Name" type="text" /> 
    <fieldset> 
     <select name="i'm_not_sure_what_to_put_here"> 
      <option value="someValue1">someValue1</option> 
      <option value="someValue2">someValue2</option> 
     </select> 
     <input id="someID" name="ContactAddress_but_i_want_it_in_the_First_DeliveryContact" type="text" /> 
     <input type="checkbox" value="Reason1" name="again_not_sure"/> 
     <input type="checkbox" value="Reason2" name="again_not_sure"/> 
     <input type="checkbox" value="Reason3" name="again_not_sure"/> 
    </fieldset> 
</form> 

// и идея заключается в том, чтобы, как многие из этих fieldsets, как мне нужно было бы «Контакты» (которые входят в Список «DeliveryContact»

Как вы можете видеть из псевдокода я не уверен, что назвать мои HTML-элементы, чтобы успешно привязать его к модели.

И, наконец, часть контроллера, как мне его подписать. Будет ли этого достаточно? Будет ли соглашение об именах в представлении достаточным для соответствия всем требованиям моего контроллера, который выглядит так.

public ActionResult DeliveryContact(DeliveryContactViewModel model) 
{ 
    foreach(var item in model.Contacts) 
    {  
     //something 
     } 
} 

Cheers, Т.

+1

Я считаю, вы должны сгенерировать имя входных значений самостоятельно. Что-то вроде 'model.Contacts [0] .ContactType' и' model.Contacts [0] .Resasons [0] '. Это означает, что вам также нужно будет ввести какой-то индекс. – merekel

+0

Да, позже прошлой ночью я понял это. Это было на самом деле, добавив индексы к именам элементов html. – talfirevic

ответ

1

Так же, как merekel предложил хитрость заключается в том, чтобы добавить индексы HTML имена элементов:

Пример:

<select name="Contacts[1].ContactType"> 
      <option value="someValue1">someValue1</option> 
      <option value="someValue2">someValue2</option> 
</select> 

или как это для другого уровня от гнездования

<input type="checkbox" value="true" name="Contacts[1].Reasons[2]"/> 

Индексы индексов являются динамическими.

я получил основную идею от Скотта Hanselman ... Here

Приветствия, Т.