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';