我有一个 BookCreateModel,其中包含书籍的平面信息,例如 Title、PublishYear 等以及书籍作者的集合(复杂类型):
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
helper :
@Html.EditorFor(m => m.Authors, "AuthorSelector")
编辑1:
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>
模板包含一些包装标记,这些AuthorSelector
标记需要了解每个渲染项目的索引以及一些处理子输入交互的 javascript,并且需要渲染一次(在AuthorSelector
模板内),因此摆脱了 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
添加一个额外的点,这使得默认模型绑定器无法解析发布的数据。
任何想法 ?
谢谢 !