绑定到嵌套对象列表

时间:2013-02-12 22:34:24

标签: asp.net-mvc-3 razor model-binding

因为我不确定如何绑定嵌套对象,让我解释一下我的困境:

这是我的班级:

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

好的,所以这里没什么特别的......

让我们现在解决查看部分:

我的想法是制作一个表格(伪代码跟随)

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

干杯, 吨。

1 个答案:

答案 0 :(得分:2)

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

当然指数是动态的。

我从Scott Hanselman那里得到了基本的想法...... Here

干杯, 吨。