RedirectResult不使用jQuery.post()

时间:2010-02-26 21:32:36

标签: jquery asp.net-mvc redirect

我正在尝试进行异步登录。当用户通过身份验证时,我想重定向到用户最初请求的页面。问题是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");
        }
    }
}

有人可以建议我如何让它发挥作用吗?

由于

戴夫

2 个答案:

答案 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方法时,它开始起作用。