2013-02-12 159 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; } 
    } 

OK,所以沒有什麼額外的特殊位置...

讓我們來解決現在查看的部分:

我的想法是做一個表格(以下僞代碼)

<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> 

//和想法是讓儘可能多的這些字段集,因爲我需要的「聯繫人」(即進入「DeliveryContact」

的列表,你可以從僞看到我不知道什麼來命名我的HTML元素,以便成功綁定到模型。

最後控制器部分如何去簽名它。這會足夠嗎? View中的命名約定是否足以將所有內容都匹配到我的控制器中,看起來像這樣。

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

乾杯, T.

+1

我相信你有產生輸入名稱值的自己。類似於'model.Contacts [0] .ContactType'和'model.Contacts [0] .Reasons [0]'。這意味着你也必須引入某種索引。 – merekel 2013-02-12 23:58:24

+0

是的,昨晚晚些時候我已經知道了。事實上,這是爲html元素名稱添加索引。 – talfirevic 2013-02-13 12:20:28

回答

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]"/> 

Ofcourse指數是動態的。

我從斯科特Hanselman的基本思想... Here

乾杯, T.