--- --- EDIT
我有这个模型
public class MainModel {
string Name;
List<Address> Addresses;
}
public class Address {
string prop2;
}
创建视图非常容易,但我没有找到在POST请求中绑定它的方法。我想避免循环使用Request.Form
查看
@foreach (var obj in Model.Address)
{
<tr>
<td>
<input type="text" id="@string.Format("obj.Name.{0}", obj.Id)" name="@string.Format("obj.Name.{0}", obj.Id)" value="@Model.Name" />
//I'm not able to overwrite the name attribute, still working on that
</td>
</tr>
}
有没有办法在ActionController中自动绑定此列表?像
这样的东西public ActionResult Edit(MainModel model, List<Address> objects)
我想我必须创建一个自定义模型绑定,但我找不到这样做的方法
...... MVC让我们变得懒惰......:)
答案 0 :(得分:4)
从阅读你的要求,你可能会过度思考解决方案。
在Views / EditorTemplates文件夹中,创建一个类似于
的View.cshtml视图@model SampleMvc.Models.Address
<tr>
<td>
@Html.HiddenFor(x=>x.Id)
@Html.TextBoxFor(x=>x.Prop2)
</td>
</tr>
在“编辑”视图中,标记类似于:
@using (Html.BeginForm()) {
<table>
@Html.EditorFor(x=>x.Name)
<br/>
<table>
@Html.EditorFor(x=>x.Addresses)
</table>
</table>
<input type="submit" id="submit" value="Submit"/>
}
EditorFor语句将使用地址编辑器模板来渲染标记。
如果您需要添加新地址的功能,可以使用客户端脚本来查找最高ID并注入以下标记
<tr>
<td>
<input id="Addresses_{HIGHESTIDVALUEHERE}__Id" type="hidden" value="{HIGHESTIDVALUEHERE}" name="Addresses[{HIGHESTIDVALUEHERE}].Id" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true">
<input id="Addresses_{HIGHESTIDVALUEHERE}__Prop2" type="text" value="" name="Addresses[{HIGHESTIDVALUEHERE}].Prop2">
</td>
</tr>
然后您的控制器操作变为
public ActionResult Edit(MainModel model){
}