jQuery阻止RedirectToAction工作?

我正在尝试重定向用户,如果他们成功登录但我的页面上的代码似乎阻止重定向工作。 如果我删除重定向下面的jQuery工作。 有人能告诉我,如果有什么我做错了吗? 谢谢

我有以下行动:

[AcceptVerbs(HttpVerbs.Post)] public ActionResult Login(User user) { var myErrors = new Dictionary(); try { if (ModelState.IsValid) { if (userRepository.ValidUser(user)) { return RedirectToAction("Index", "Group", new {page = (int?)null}); } else { return Json("Username or password seems to be incorrect"); } } else { foreach (KeyValuePair keyValuePair in ViewData.ModelState) { if (keyValuePair.Value.Errors.Count > 0) { List errors = new List(); myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage); } } return Json(myErrors); } } catch (Exception) { return Json("Invalid"); } } 

以及我页面上的以下代码:

  $(document).ready(function() { $("#SaveSuccess").hide(); $("#btnLogin").click(function() { $("form").submit(function(event) { var formData = $(this).serialize(); $.post($(this).attr("action"), formData, function(res) { ShowErrors(res); if (res == true) { $("#SaveSuccess").text("Saved"); } else { $("#divError").html(res); } $("#SaveSuccess").fadeIn(100); }, "json"); return false; }); }); });  

你应该看看这个问题 ,你的问题是它发送302(IIRC,它是早期的)以响应AJAX请求,而不是整体页面请求,所以你需要寻找那个标题并重定向整个页面,如果它被发现了。

最顶层答案的方法可能与跨浏览器一样整洁,只需返回带有重定向url的JSON并重定向到该url,如下所示:

  $("form").submit(function(event) { var formData = $(this).serialize(); $.post($(this).attr("action"), formData, function(res) { if (res.redirect) { window.location.href = res.redirect; return; } ShowErrors(res); if (res == true) { $("#SaveSuccess").text("Saved"); } else { $("#divError").html(res); } $("#SaveSuccess").fadeIn(100); }, "json"); return false; }); 

在C#Side这样的东西而不是重定向:

 return JSon({redirect = Url.Action("Index", "Group", new {page = (int?)null})}); 

这很可能是因为你的return false; 在jquery代码的末尾或者你的jquery代码中可能存在一些错误,但是你也可以像这样重定向一个用户:

 window.location = 'url-here'; 

要么

 document.location.href = 'url-here';