Title、PublishYearなどの本の平面情報に加えて、本の著者のコレクション(複合型)で構成されるBookCreateModelがあります。
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
レンダリングされた各アイテムのインデックスを認識する必要があるいくつかのラッパー マークアップと、子入力の相互作用を処理し、(テンプレート内で) 1 回レンダリングする必要があるいくつかの 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
、デフォルトのモデルバインダーが投稿されたデータを解析できないようにする余分なドットを追加します。
何か案が ?
ありがとう !