Wenn eine Auflistung an EditorFor () übergeben wird, werden ungültige Namen für Eingabeelemente generiert

Ich habe ein BookCreateModel, das aus den Flugzeuginformationen des Buchs wie Titel, Erscheinungsjahr usw. sowie einer Sammlung von Buchautoren (komplexer Typ) besteht:

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; }
}

in der CreateBook Ansicht habe ich benutztEditorFor helfer:

@Html.EditorFor(m => m.Authors, "AuthorSelector")
Edit1:

und AuthorSelector Vorlage ist wie folgt:

<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>

dasAuthorSelector Die Vorlage enthält einige Wrapper - Markups, die den Index jedes gerenderten Elements kennen müssen, sowie JavaScript, das die Interaktionen der untergeordneten Eingaben behandelt und einmal (innerhalb von) gerendert werden mussAuthorSelector template), daher ist es nicht möglich, die for-Schleife / oder die AuthorSelector-Vorlage zu entfernen.

jetzt ist das Problem EditorFür ein wenig seltsam und generieren Eingabenamen wie folgt:

<input id="Authors__0__FirstName" name="Authors.[0].FirstName" type="text" value="" />
<input id="Authors__0__LastName" name="Authors.[0].LastName" type="text" value="" />

wie Sie sehen können, anstatt Namen wie zu generierenAuthors[0].FirstName Es wird ein zusätzlicher Punkt hinzugefügt, wodurch der Standard-Modellordner keine veröffentlichten Daten mehr analysieren kann.

irgendeine Idee ?

Vielen Dank !

Antworten auf die Frage(6)

Ihre Antwort auf die Frage