при передаче коллекции в EditorFor () он генерирует недопустимые имена для элементов ввода
У меня есть BookCreateModel, которая состоит из информации о плоскости книги, такой как Title, PublishYear & amp; и т.д. плюс коллекция авторов книги (сложный тип):
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
это добавляет дополнительную точку, которая делает связыватель модели по умолчанию неспособным проанализировать отправленные данные.
любая идея ?
Спасибо !