0

在 MVC 3 应用程序上使用 jQuery ajax 进行一些 CRUD 操作。

我将我的用户详细信息表单发布到控制器方法以保存信息。保存信息后,我将通过传递保存的 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 中的重定向意味着 302 状态代码带有一个Location标头,然后是客户端对目标位置的 GET 请求。

如果您在浏览器中使用 FireBug 或类似的 javascript 调试工具来分析 AJAX 请求,您会立即看到这一点。

于 2013-01-04T13:45:12.797 回答