我有一个 BookCreateModel,其中包含书籍的平面信息,例如标题、出版年份等以及书籍作者的集合(复杂类型):
public class BookCreateModel
{
public string Title { get; set; }
public int Year { get; set; }
public IList<AuthorEntryModel> Authors { get; set; }
}
public class AuthorEntryModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在 CreateBook 视图中我用过EditorFor
帮手:
@Html.EditorFor(m => m.Authors, "AuthorSelector")
Edit1:
AuthorSelector 模板如下:
<div class="ptr_authors_wrapper">
@for (int i = 0; i < Model.Count; i++)
{
<div class="ptr_author_line" data-line-index="@i">
@Html.TextBoxFor(o => o[i].FirstName)
@Html.TextBoxFor(o => o[i].LastName)
</div>
}
</div>
<script>
...
</script>
the AuthorSelector
模板包含一些包装标记,这些标记需要了解每个渲染项目的索引,以及一些处理子输入交互的 javascript,并且需要渲染一次(在AuthorSelector
template),因此摆脱 for 循环/或 AuthorSelector 模板是不可能的。
现在的问题是 EditorFor 的行为有点奇怪并生成如下输入名称:
<input id="Authors__0__FirstName" name="Authors.[0].FirstName" type="text" value="" />
<input id="Authors__0__LastName" name="Authors.[0].LastName" type="text" value="" />
正如你所看到的,而不是生成像这样的名称Authors[0].FirstName
它添加了一个额外的点,这使得默认模型绑定器无法解析发布的数据。
任何想法 ?
Thanks !