因为我不确定如何绑定嵌套对象,让我解释一下我的困境:
这是我的班级:
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
}
}
干杯, 吨。
答案 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
干杯, 吨。