使用HttpPost的MVC3 jQuery表单提交和RedirectToAction不起作用

时间:2013-01-04 13:40:51

标签: jquery asp.net-mvc asp.net-mvc-3

使用jQuery ajax进行一些带有CRUD操作的MVC 3应用程序。

我将用户详细信息表单发布到控制器方法以保存信息。 保存信息后,我通过传递已保存的ID和一些tempdata信息重定向到详细信息页面,以显示“用户保存成功”等消息

但是在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();
    });

1 个答案:

答案 0 :(得分:2)

如果您想要重定向到[HttpPost]方法,请从UserDetail方法中删除[HttpPost]属性。

如果使用return RedirectToAction("UserDetail", new { Id = viewModel.userId});属性修饰控制器操作,则意味着只能使用POST HTTP谓词访问此操作。但在您的情况下,您正在重定向到它(Location),并且您知道HTTP中的重定向意味着302状态代码带有{{1}}标头,后跟客户端到目标位置的GET请求。

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