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