RedirectResult не работает с jQuery.post () - PullRequest
1 голос
/ 27 февраля 2010

Я пытаюсь сделать асинхронный вход в систему. Когда пользователь аутентифицирован, я хочу перенаправить на первоначально запрашиваемую страницу пользователя. Проблема в том, что метод действия возвращает тип 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");
        }
    }
}

Может кто-нибудь подсказать, как мне заставить это работать?

Спасибо

Dave

Ответы [ 2 ]

1 голос
/ 27 февраля 2010

Прежде всего, я не думаю, что это хороший способ войти в систему. Плюс, что возвращает ваш контроллер, если имя пользователя или пароль неверны?

В любом случае, вот способ, которым вы можете прочитать заголовки из ответа и выполнить перенаправление с помощью 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;
});

Я не проверял это, но это должно дать вам представление.

0 голосов
/ 02 марта 2010

Оказывается, я публиковал маршрут по умолчанию для AccountController, который возвращал представление полной страницы, что в свою очередь вызывало бы метод LogOn. Этот метод действия будет возвращать перенаправление, но это было в контексте представления индекса.

Каким-то образом редирект «терялся во всей этой суете», то есть я не знаю, что именно происходило, но когда я начал публиковать сообщения непосредственно в методе LogOn, он начал работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...