1

因为我不确定绑定到嵌套对象的工作原理,所以让我解释一下我的困境:

这是我的课:

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>

//并且想法是制作尽可能多的这些字段集,因为我需要“联系人”(进入“DeliveryContact”列表

正如您从伪代码中看到的那样,我不确定如何命名我的 HTML 元素才能成功地将其绑定到模型。

最后是控制器部分,我该如何签署它。这够了吗?View 中的命名约定是否足以将所有内容匹配到我的控制器中,看起来像这样。

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

干杯,T。

4

1 回答 1

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 那里得到了基本的想法......这里

干杯,T。

于 2013-02-13T12:32:09.533 回答