ユーザーのテーブルを含む Index.cshtmlという名前のビューがあります (作成/編集/更新機能)。
ボタン (作成/編集/更新) をクリックすると、jQuery ダイアログが表示されます。次に、次のような ajax 投稿を使用します。
- 編集 >> 編集用のアクション コントローラーを呼び出し、json を返す >> javascript で行テーブルを更新する
- 削除 >> 削除するためのアクション コントローラーを呼び出して json を返す >> javascript で行テーブルを削除する
- 作成 >> 作成用のアクション コントローラーを呼び出し、Index.cshtml にリダイレクト >> ???
作成部分については、問題があります。ビューを「単に」表示したいのですが、ajax の投稿をしています。進め方がわかりません。
これが私のコードです(データを送信してからビューを更新します):
$.post($(this).attr('action'), $(this).serialize(), function (data, status) {
$('#my-modal').modal('hide');
if (data.operation == 'edit') {
// Edit
var row = $('#' + data.userid);
row.children(':eq(0)').text(data.company);
row.children(':eq(1)').text(data.username);
row.children(':eq(2)').text(data.email);
row.children(':eq(3)').text(data.firstname);
row.children(':eq(4)').text(data.lastname);
} else if (data.operation == 'delete') {
// Delete
var row = $('#' + data.userid);
row.remove();
} else {
// Create
alert(data);
$("#userList").html(data);
}
})
ご覧のとおり、「作成」の「編集」または「削除」(最後の可能性) を行うかどうかを示す data.operation を確認します。作成の問題は、ビュー全体 (< html> < body>...) が生成され、#userList div に追加されることです。それは重複したものです。
多分それは正しいことではありませんか?
ありがとう。
更新しました
ここに私の作成アクションがあります:
[HttpPost]
public ActionResult Create(UserCreateViewModel viewModel)
{
if (!ModelState.IsValid)
{
this.Response.StatusCode = 400;
return PartialView("Create", viewModel);
}
var userDTO = new UserDTO();
Mapper.Map(viewModel, userDTO);
_requestServiceClient.CreateNewUser(userDTO);
return RedirectToAction("Index");
}
ここに私のインデックスアクションがあります:
[Authorize]
public ActionResult Index(string q, int? page)
{
var users = _requestServiceClient.GetUsers();
...
...
if (Request.IsAjaxRequest())
return PartialView(userListPaged);
else
return View(usersListPaged);
}
リリース後、「作成」の場合、私の見解では、次のようにページを単にリロードする方が良いかもしれません:
...
} else if (data.operation == 'create') {
// Create >> refresh the page
location.reload();
}
とにかくありがとう。