【发布时间】:2013-01-31 20:19:37
【问题描述】:
例如:
型号
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
人物编辑器模板 (PersonEditor.cshtml):
@model MvcApplication1.Models.Person
@Html.HiddenFor(x=>x.ID)
<label>First Name</label>
@Html.TextBoxFor(x=>x.FirstName)
<label>Last Name</label>
@Html.TextBoxFor(x=>x.LastName)
<br />
在我的主页上,我希望能够执行以下操作:
@model IList<MvcApplication1.Models.Person>
@using (Html.BeginForm())
{
@Html.EditorFor(x=>x,"PersonEditor")
}
并拥有表单中的所有元素,自动生成专有名称;而不必像现在这样遍历集合:
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Count; i++)
{
@Html.EditorFor(x=>Model[i],"PersonEditor")
}
}
表单元素必须包含以下格式:
<input name="[0].ID" type="text" value="Some ID" />
<input name="[0].FirstName" type="text" value="Some value" />
<input name="[1].ID" type="text" value="Some x" />
<input name="[1].FirstName" type="text" value="Some y" />
等等……
因为在我的控制器中,我希望在表单发布打包时收到IList<Person>。
我可以完全消除那个 for 循环吗?
编辑
现在,当我简单地执行@Html.EditorFor(x=>x)(换句话说,没有循环)时,我得到了这个异常:
传入字典的模型项是类型 'MvcApplication1.Models.Person[]',但是这个字典需要一个 'MvcApplication1.Models.Person' 类型的模型项。
【问题讨论】:
-
@Zabavsky 太棒了!相信我,我在 SO 中搜索了一个多小时,但从未遇到过这个问题。谢谢!
标签: asp.net-mvc asp.net-mvc-4 razor-2