データテーブル内のユーザーのリストを表示するデータテーブル Web ページがあります。ユーザーページには、新しいユーザーを作成するボタンがあります。これをクリックすると、ユーザーが新しいユーザーの詳細を入力するためのモーダル jQuery ダイアログ ボックスが起動します。ダイアログ ボックスを閉じるだけの [キャンセル] ボタンと、クリックするとコントローラーの DoSaveUser メソッドを呼び出す [ユーザーの保存] ボタンがあります。デバッグから、ユーザーが保存されたと言ってユーザーの作成が成功した場合、最後に PartialView に戻る DoSaveUser メソッドに入ることがわかります。ただし、詳細を入力したダイアログは成功メッセージに置き換えられません-ユーザーが作成されているにもかかわらず-つまり-保存ボタンを押した後-ダイアログをキャンセルして元のユーザーページを更新すると、データテーブルが表示されます新しいユーザーで更新されました。
UserList ページのコード (ダイアログには forename 以外にも多くのフィールドがありますが、質問のコードを少なくするためにそれらを削除しました)。したがって、CreateUser ボタンをクリックすると、newUserDialog が起動されます。
<div id="newUserDialog">
@using (Html.BeginForm("DoSaveUser", "MyController", FormMethod.Post, new { id = "saveForm" }))
{
<div id="resultContainer">
<table class="ui-widget-content" style="width: 565px; margin-top: 10px;">
<tr>
<td style="width: 100px;">
</td>
<td class="label">
Forename :
</td>
<td class="value">
@Html.TextBoxFor(model => model.Forename, new { style = "width:150px" })
</td>
</tr>
</table>
<div class="ui-widget-content Rounded" style="width: 565px; margin-top: 10px; text-align: center;">
<input id="Cancel" type="button" class="dialog-button" value="Cancel" style="margin: 5px" />
<input id="DoSaveUser" type="submit" class="dialog-button" value="Save User" style="margin: 5px" />
</div>
</div>
}
クリックされたダイアログでユーザーを保存するための Javascript コード - フォームを送信します。
$(function () {
$('#saveForm').submit(function () {
var formData = $("#saveForm").serializeArray();
$.ajax({
url: this.action,
type: this.method,
data: formData,
dataType: "json",
success: function (result) {
$('#resultContainer').html(result);
}
});
return false;
});
});
コントローラーの DoSaveUser メソッドで、ブレークポイントを設定してヒットし、対応するフィールドに正しく送信されているすべての値を確認できます。DB に保存すると、これが返されます。
return PartialView("UserSuccess", model);
そして、これがcshtmlに含まれるビューのすべてです。私が望んでいたのは、すべてのテキストボックスフィールドとラベルを含む結果コンテナDivであり、User Createdに正常に置き換えられたことに注意してください。そして、このページで OK が必要になります。これをクリックすると、ダイアログ ボックスが閉じられ、UserList ページが更新され、新しいユーザーで更新されたデータテーブルが表示されます。ただし、保存をクリックすると、テキストボックスは Div にとどまり、Div は変更されませんが、ダイアログをキャンセルしてページを更新すると、新しいユーザーで更新されたデータテーブルが表示されます。足りないものはありますか?(注 - jquery.unobtrusive-ajax.js を _Layout ページに追加しました)
@model MyProject.Models.UserModel
@{
ViewBag.Title = "UserSuccess";
}
<div id="resultContainer">
User Created Successfully
</div>