MVC アプリケーションでは、オブジェクトのリストを含むフォームがリストをコントローラーに正しく送信しません。フォームを送信した後、コントローラーが受信したオブジェクトのリストは空です。
この問題は、フォーム要素内のリスト項目のインデックスが欠落していることが原因で発生します。モデル バインダーには、リスト内の要素を区別するためのインデックスが必要です。
この問題を解決するには、部分ビューの代わりにテンプレートを使用します。
1. エディタテンプレートを作成します
ビュー フォルダーの下の "EditorTemplates" フォルダーに、"PlanCompareViewModel.cshtml" という名前のエディター テンプレートを作成します。次のコードをテンプレートに追加します:
<code>@model PlanCompareViewModel <div> @Html.HiddenFor(p => p.PlanID) @Html.HiddenFor(p => p.CurrentPlan) @Html.CheckBoxFor(p => p.ShouldCompare) </div></code>
2. 親ビューを変更します
次のように親ビューを更新します:
<code>@model IEnumerable<plancompareviewmodel> @using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" })) { <div> @Html.EditorForModel() </div> }</code>
DisplayTemplates と EditorTemplates は、コレクションのインデックス付けを自動的に処理し、モデル バインダーがオブジェクトの正しいリストを作成するようにします。
以上がMVC フォームがオブジェクトのリストを投稿できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。