0

jQueryajaxを使用したいくつかのCRUD操作でMVC3アプリケーションに取り組んでいます。

ユーザー詳細フォームをコントローラーメソッドに送信して、情報を保存します。情報が保存されたら、保存されたIDと一時データ情報を渡して詳細ページにリダイレクトし、「ユーザーが正常に保存されました」などのメッセージを表示します。

ただし、SaveUserDetailメソッドの後、コントローラーのDetailメソッドに移動することはありません。

これが私のコントローラーコードです

    [HttpPost, Authorize]
    public ActionResult UserDetail(string Id)
    {
     User user = AdminService.SelectUserByUserName(Id);
     UserDetailViewModel viewModel = Mapper.Map<User, UserDetailViewModel>(user);
        if (TempData["SaveStatus"] != null && TempData["SaveStatus"] == "true")
        {
            viewModel.InSaveMode = true;
            viewModel.SaveStatus = true;
        }
        return View(viewModel);
    }

    [HttpPost, Authorize, ValidateAntiForgeryToken]
    public ActionResult SaveUserDetail(UserDetailViewModel viewModel)
    {
        User userToSave = new User();
        AdminService.UpdateUser(userToSave);
        TempData["SaveStatus"] = "true";
        return RedirectToAction("UserDetail", new { Id = viewModel.userId});
    }

私のjQueryコード

 $("#user-detail-form").submit(function (e) {
        if ($(this).valid()) {
            $.post('@Url.Action("SaveUserDetail")', 
                       $(this).serialize(), function (data) {
                $("#user-detail-box").html(data);
                $.validator.unobtrusive.parse($("#user-detail-box"));
            });
        }
        e.preventDefault();
    });
4

1 に答える 1

2

リダイレクトする場合は、メソッド[HttpPost]から属性を削除してください。UserDetail

コントローラ アクションが[HttpPost]属性で修飾されている場合、これは、このアクションが POST HTTP 動詞でのみアクセス可能であることを意味します。しかし、あなたの場合はそれにリダイレクトしています(return RedirectToAction("UserDetail", new { Id = viewModel.userId});)。ご存知のように、HTTPでのリダイレクトは、Locationヘッダー付きの302ステータスコードを意味し、その後にクライアントによるターゲットロケーションへのGETリクエストが続きます。

ブラウザで FireBug または同様の JavaScript デバッグ ツールを使用して AJAX リクエストを分析した場合、すぐにこれを確認できたはずです。

于 2013-01-04T13:45:12.797 に答える