我已经实现了一个控制器来创建新的用户.当它成功创建用户时,它将重定向到Index().
我想要的是一切都可以重定向,但保持在当前页面,看到错误,当某些失败.
我正在使用jQuery ajax与MVC.
我的控制器如下所示:
[Authorize] public ActionResult CreateUser(string username) { try { //here the logic to create the user } catch (Exception ex) { string error = string.Format("Error creating user: {0}",ex.Message); Response.StatusCode = 500; Response.Write(error); } return RedirectToAction("Index"); }
表单submit是用jQuery截取的,然后用ajax进行调用:
$("#new-user-form").submit(function() { var form = $(this); $.ajax({ type: "GET",url: form.attr('action'),data: form.serialize(),success: function(data,textStatus,xhr) { //At this point I would like to redirect },error: function(xhr,errorThrown) { $(".error-summary").html(xhr.responseText); } }); //cancel the event return false; });
发生错误时工作正常,但我不知道如何实现成功案例.
我打开了其他选择.
解决方法
如果您要在成功操作中重定向,为什么要使用AJAX? AJAX的目的是仅刷新站点的一部分而不重新加载整个页面.如果在成功的行动中,您将要重定向,完全失去了从AJAX获得的所有目的和好处.但是因为你问这个可以做什么:
[Authorize] public ActionResult CreateUser(string username) { ... if (Request.IsAjaxRequest()) { return Json(new { redirectToUrl = Url.Action("Index") }); } return RedirectToAction("Index"); }
接着:
success: function(data,xhr) { window.location.href = data.redirectToUrl; },