我正在尝试重定向用户,如果他们成功登录但我的页面上的代码似乎阻止了重定向工作。如果我删除重定向下面的jQuery工作。有人能告诉我,如果有什么我做错了吗?感谢
我有以下行动:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(User user)
{
var myErrors = new Dictionary<string, string>();
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<string, ModelState> keyValuePair in ViewData.ModelState)
{
if (keyValuePair.Value.Errors.Count > 0)
{
List<string> errors = new List<string>();
myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage);
}
}
return Json(myErrors);
}
}
catch (Exception)
{
return Json("Invalid");
}
}
以及我页面上的以下代码:
<script language="javascript" type="text/javascript">
$(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;
});
});
});
</script>
答案 0 :(得分:6)
你应该看看this question,你的问题是它发送302(IIRC,它是早期的)以响应AJAX请求,而不是整体页面请求,所以你需要寻找那个头如果找到,则重定向整个页面。
顶部答案中的方法可能与跨浏览器一样整洁,只需返回带有重定向网址的JSON并重定向到该网址,如下所示:
$("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})});
答案 1 :(得分:2)
这很可能是因为你在jquery代码的末尾有return false;
或者你的jquery代码中可能有一些错误,但你也可以像这样重定向用户:
window.location = 'url-here';
或
document.location.href = 'url-here';