У меня есть 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 помощник:
@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>
В шаблоне 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, он добавляет дополнительную точку, которая делает связующее устройство по умолчанию неспособным анализировать опубликованные данные.
любая идея?
Спасибо!