我正在尝试进行异步登录。当用户通过身份验证时,我想重定向到用户最初请求的页面。问题是Action方法返回一个Redirect类型的ActionResult,而jQuery似乎不知道该怎么做..
我正在使用以下jQuery:
$("form").submit(function(event)
{
$.post($(this).attr("action"), $(this).serialize(), function(result)
{
}, "html"); // is this the right return type?
return false;
});
在服务器上使用此代码来处理登录:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(WAPConfigUser user)
{
if (ValidateLogOn(user.UserName, user.Password))
{
string redirect = "";
if (Request.QueryString["ReturnUrl"] != null)
{
redirect = Request.QueryString["ReturnUrl"];
return Redirect(redirect);
}
else
{
return RedirectToRoute("Default");
}
}
}
有人可以建议我如何让它发挥作用吗?
由于
戴夫
答案 0 :(得分:1)
首先,我认为这不是一个记录用户的好方法。另外,当用户名或密码错误时,你的控制器会返回什么?
无论如何,这里有一种方法可以从响应中读取标题并使用jQuery进行重定向。
$("form").submit(function(event) {
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: $(this).serialize(),
complete: function (XMLHttpRequest, textStatus) {
if(XMLHttpRequest.status === 302) {
//if it wants to redirect
window.location = XMLHttpRequest.getResponseHeader("Location");
}
}
});
return false;
});
我没有对此进行测试,但它应该给你一个想法。
答案 1 :(得分:0)
事实证明,我发布了AccountController的默认路由,该路由返回整页的视图,而后者又会调用LogOn方法。该操作方法将返回重定向,但它位于索引视图的上下文中。
不知何故,重定向“迷失了”,也就是说我不知道到底发生了什么,但当我开始直接发布到LogOn方法时,它开始起作用。