実現したいこと
Ajaxが成功した時に以下を行いたいです。
・部分ビューの更新
・親ビューへ成功メッセージの出力
前提
ASP.NET Core MVCで業務アプリケーションを作っています。
実装方法がわからない点について教えていただきたいです。
発生している問題・エラーメッセージ
該当のソースコードのように実装すれば、
Ajaxが成功した場合、部分ビューを更新できるところは実現できました。
・部分ビューの更新
・親ビューへ成功メッセージの出力
を行う場合、部分ビューを更新する情報、成功メッセージの情報をJasonで返す必要があると思いますが、
どのようにJSONに格納して、部分ビューを更新してよいかわかりません。
該当のソースコード
親ビュー (ParentView.cshtml):
@model ParentViewModel @using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post)) { <div class="form-group"> @Html.LabelFor(model => model.Name) @Html.TextBoxFor(model => model.Name, new { @class = "form-control" }) </div> <input type="submit" value="Submit" class="btn btn-primary" /> } //部分ビューの描画場所 <div id="partialViewContainer"> @Html.Partial("_PartialView", Model.PartialViewModel) </div> @section scripts { <script> // フォームのサブミット時にAjaxリクエストを送信して部分ビューを更新する $(function () { $('form').submit(function (event) { event.preventDefault(); var form = $(this); $.ajax({ url: form.attr('action'), type: form.attr('method'), data: form.serialize(), success: function (result) { $('#partialViewContainer').html(result); } }); }); }); </script> }
部分ビュー (_PartialView.cshtml):
@model PartialViewModel <h2>Partial View</h2> <p>Name: @Model.Name</p>
コントローラー (HomeController.cs):
public class HomeController : Controller { public IActionResult Index() { var parentViewModel = new ParentViewModel(); parentViewModel.PartialViewModel = new PartialViewModel(); return View("ParentView", parentViewModel); } [HttpPost] public IActionResult SubmitForm(ParentViewModel parentViewModel) { // フォームのデータを受け取り、部分ビューのモデルを更新する処理を行う // 部分ビューに渡すモデルを再取得する(更新したモデルを使用する) var updatedPartialViewModel = new PartialViewModel(); updatedPartialViewModel.Name = parentViewModel.Name; // 部分ビューを再描画して返す return PartialView("_PartialView", updatedPartialViewModel); } }
試したこと
下記のような形で実装できないか試しているのですが、
Controllerから返すJSONのhtmlContentsにどうやって部分ビューの更新情報をセットしてよいかわかりません。
該当のソースコードのコントローラーのメソッド(SubmitForm)で返している
PartialView("_PartialView", updatedPartialViewModel);をhtmlContentsにセットしてもうまくいかないことまではわかっております。
親ビュー (ParentView.cshtml):
@section scripts { <script> // フォームのサブミット時にAjaxリクエストを送信して部分ビューを更新する $(function () { $('form').submit(function (event) { event.preventDefault(); var form = $(this); $.ajax({ url: form.attr('action'), type: form.attr('method'), data: form.serialize(), success: function (result) { //■■■変更部分■■■ //成功したら・・・ if (result.success) { //部分ビュー更新(ここで部分ビューを更新する情報を受け取りたい) $('#partialViewContainer').html(result.htmlContents); //親ビューへ成功メッセージの出力(ここで出力するメッセージを受け取りたい) $('#messageContainer').html('<div>' + result.message + '</div>'); } } }); }); }); </script> }
コントローラー (HomeController.cs):
[HttpPost] public IActionResult SubmitForm(ParentViewModel parentViewModel) { // フォームのデータを受け取り、部分ビューのモデルを更新する処理を行う // 部分ビューに渡すモデルを再取得する(更新したモデルを使用する) var updatedPartialViewModel = new PartialViewModel(); updatedPartialViewModel.Name = parentViewModel.Name; //■■■変更部分■■■ // JSONを返す。 return Json(new { success = true, .htmlContents=(ここにどうやってセットすればよいわからない。) ,message = "処理成功" }); }
補足情報(FW/ツールのバージョンなど)
ASP.NET Core MVC
.NET6
Visual Studio 2022
回答1件
あなたの回答
tips
プレビュー