使用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();
});
答案 0 :(得分:2)
如果您想要重定向到[HttpPost]
方法,请从UserDetail
方法中删除[HttpPost]
属性。
如果使用return RedirectToAction("UserDetail", new { Id = viewModel.userId});
属性修饰控制器操作,则意味着只能使用POST HTTP谓词访问此操作。但在您的情况下,您正在重定向到它(Location
),并且您知道HTTP中的重定向意味着302状态代码带有{{1}}标头,后跟客户端到目标位置的GET请求。
如果您在浏览器中使用过FireBug或类似的javascript调试工具来分析AJAX请求,您会立即看到它。