ASP.NET MVCの学習で検索機能を作成しています。検索条件モデルSearchCondListをビューからコントローラーへPOSTし条件にあったデータをDBから抽出したいのですが、タイトルの現象を修正できずこちらを利用させて頂きました。
コントローラーの[HttpPost]側の処理を通っていることはブレークポイントで確認できており、また_modelのRegNoの値がNULLとなっていることを確認できたので、ビューからコントローラーへパラメータを受け渡すモデルの記述が正しくないのかと考えています。よろしくお願い致します。
該当のソースコード
####Model
public class SearchListModels { /// <summary> コンストラクタ </summary> public SearchListModels() { } // 参加者リスト public List<SearchViewModel> SearchList { get; set; } = new List<SearchViewModel>(); // 検索条件リスト public SearchCondModel SearchCondList { get; set; } = new SearchCondModel(); } //参加者モデル public class SearchViewModel { /// ID </summary> public string Id { get; set; } /// <summary> 参加者番号 </summary> public string RegNo { get; set; } ・ (以下検索条件モデルと同じ) ・ ・ } //検索条件モデル public class SearchCondModel { /// <summary> ID </summary> public string Id { get; set; } /// <summary> 参加者番号 </summary> public string RegNo { get; set; } ・ (以下参加者モデルと同じ) ・ ・ }
###Controller
public class SearchController : Controller { // 初期化 ISearchService _service; // コンストラクタ- public SearchController() { _service = new SearchService(); } //画面起動時 public ActionResult Index() { SearchCondModel _model = new SearchCondModel(); _model.Id = ViewBag.Id; // SearchServiceのDBContextにアクセスしデータ抽出 return View(_service.GetList(_model)); } //ポスト時処理 [HttpPost] [ValidateAntiFoeryToken] public ActionResult Index(SearchCondModel _model) (ここで_modelのRegNoはNULLとなっており、ビューから検索条件をうけとれていない。) { _model.Id = 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を渡せていない。) } ・ ・ ・ @*検索結果一覧*@ <table> @foreach (var item in Model.SearchList) { <tr><td> @Html.DisplayFor(modelItem => item.RegNo) (ここで条件なしの検索結果は取得できている。) </td></tr> ・ ・ ・ } </table>
試したこと
@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
回答1件
あなたの回答
tips
プレビュー