при передаче коллекции в EditorFor ()он генерирует недопустимые имена для входных элементов

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

Есть идеи ?

Спасибо !

10
задан Alireza Sabouri 10 July 2012 в 08:33
поделиться