przekazując kolekcję do EditorFor (), generuje niepoprawne nazwy elementów wejściowych
Mam BookCreateModel, który składa się z informacji o płaszczyźnie książki, takich jak tytuł, publikacja, itd. Oraz kolekcja autorów książek (typ złożony):
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; }
}
w widoku CreateBook użyłemEditorFor
pomocnik:
@Html.EditorFor(m => m.Authors, "AuthorSelector")
Edytuj1:a szablon AuthorSelector jest następujący:
<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
szablon zawiera kilka znaczników opakowujących, które muszą być świadome indeksu każdego renderowanego elementu, a także javascript obsługujący interakcje danych wejściowych podrzędnych i muszą być renderowane tylko raz (wewnątrzAuthorSelector
szablon), więc pozbycie się szablonu for loop / lub AuthorSelector nie jest możliwe.
teraz problem polega na tym, że EditorFor działa trochę dziwnie i generuje takie nazwy wejściowe jak:
<input id="Authors__0__FirstName" name="Authors.[0].FirstName" type="text" value="" />
<input id="Authors__0__LastName" name="Authors.[0].LastName" type="text" value="" />
jak widać zamiast generowania nazw takich jakAuthors[0].FirstName
dodaje dodatkową kropkę, która sprawia, że domyślny segregator modelu nie może przeanalizować opublikowanych danych.
dowolny pomysł ?
Dzięki !