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