質問: ViewBag.Id; // SearchServiceのDBContextにアクセスしデータ抽出 return View(_service.GetList(_model)); (ここで検索条件なしの場合のデータを取得している。) } } ``` ### View ``` Index.cshtml @*検索条件入力テキストボックス*@ @using (Html.BeginForm("Index", "Search", FormMethod.Post)) { @Html.AntiForgeryToken() @Html.TextBoxFor(x => x.SearchCondList.RegNo) (ここでコントローラー側にRegNoを渡せていない。) } ・ ・ ・ @*検索結果一覧*@ @foreach (var item in Model.SearchList) { @Html.DisplayFor(modelItem => item.RegNo) (ここで条件なしの検索結果は取得できている。) ・ ・ ・ } ``` ### 試したこと @Html.TextBoxFor(x => x.SearchCondList.RegNo)を@Html.TextBoxFor(Model => Model.SearchCondList.RegNo)とした場合は、検索結果一覧の@foreach (var item in Model.SearchList)と競合したので、xとしています。 ### 開発環境(追記しました。) windows 10 pro VisualStudio 2015 Update3 ASP .NET MVC 5 .NET FrameWork 4.6.1 EntityFramework 6.0 C# 6.0 DB:SQLServer 2017
回答: コレクションのモデルバインディングがうまく行われるようにするには、レンダリングされる html 要素の name 属性が連番のインデックスを含むようにします。 以下の記事を見てください。 コレクションのデータアノテーション検証 具体的には、name="prefix[index].Property" というパターンにします。prefix の部分にはアクションメソッドのパラメータ(仮引数)名が入ります。index は 0 から始まる連番です。数字の連続が途切れた場合は解析が停止し、0 から途切れる前までのデータが返されます。 上の記事は Model が少々複雑ですがそれが分かりにくかったら、単純に親子関係のデータを登録する以下の記事の方が分かりやすいかもしれません。 親子関係のあるデータ登録 上の記事の Model の Parent クラスを質問者さんの Model の SearchListModels クラスに、Child クラスを SearchCondModel クラスに置き換えて考えてみてください。上の記事の Model の定義は記事の一行目にあるリンク「MVC4 EF Code First」をたどって別の記事を見てください。 分からないことがあればこの回答のコメント欄で質問してください。 **【追記】** 思い違いしていたかも。今回の話は SearchListModels クラスの SearchCondList プロパティから取得できる単一の SearchCondModel オブジェクトで、コレクション云々は関係なかったですか? つまり、自分は List SearchCondList ... と勘違いしてましたが、質問のコードの SearchCondModel SearchCondList ... の通りで、対象は単一の SearchCondModel オブジェクトで良いのですよね?