4

Как определить, была ли перенаправлена ​​форма формы aynax запроса async? В моем случае запрос перенаправляется на страницу входа, если сеанс пользователя закрыт.Ajax.BeginForm проверить, был ли перенаправлен запрос

Я попытался проверить аргументы событий OnComplete, OnSuccess и OnBegin (OnFailure не вызывается), но никто не помог.

В настоящее время у меня есть вся страница входа в систему, заполненная в div текущей страницы в случае закрытия сессии.

Единственный способ я вижу, как это awoid - это такой код:

function onSuccessPost(a,b,c) { 
    if (a.indexOf("<!DOCTYPE html>") == 0) { 
     window.location = window.location; 
    } 
    // ... 
} 

Но это решение кажется немного некрасиво.

Любые идеи?

+0

окно.Parent !? – swapneel

+0

Не знаю, как кошка помогает. window.Parent такой же после каждого асинхронного запроса. – Serhiy

ответ

0

Не перенаправлять от действий контроллера, которые вызываются через AJAX. Вы можете использовать JSON:

public ActionResult Foo() 
{ 
    var url = Url.Action("Bar", "Baz"); 
    return Json(new { location = url }, JsonRequestBehavior.AllowGet); 
} 

и теперь в вашем AJAX успеха обратного вызова:

success: function(result) { 
    window.location.href = result.location; 
} 

Очевидно, что если вы намерены всегда перенаправлять на стороне клиента после запроса AJAX, это полностью убивает какую-либо выгоду от AJAX , Просто вызовите действие контроллера, используя стандартную ссылку => В этом случае использовать AJAX бессмысленно.


UPDATE:

Похоже, что вы пытаетесь сделать, это перехватить перенаправление на страницу входа, когда куки проверки подлинности форм истек. Phil Haack blogged about: http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

В этой статье он иллюстрирует, как вы можете запретить модуль проверки подлинности форм автоматически перенаправлять вас на страницу LogOn, а вместо этого отправлять код состояния 401, который может быть перехвачен вашим запросом AJAX и выполнить перенаправлять на клиента.

+0

В моем случае перенаправление на страницу «Вход» происходит автоматически. У меня нет логики перенаправления в моих действиях. Но у меня есть атрибут Authorize на контроллере. – Serhiy

+0

А также мне не нужно всегда перенаправлять после запроса AJAX. Только после завершения сеанса. – Serhiy

+2

ОК, вы должны были заявить об этом в своем вопросе, поскольку это очень важная деталь. Взгляните на эту статью для очень аккуратного способа перехвата этого условия перенаправления: http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot -want.aspx Теперь вы можете зафиксировать 401 ошибки в ваших запросах AJAX и не позволить модулю проверки подлинности форм ASP.NET автоматически перенаправлять вас на страницу LogOn, когда действие запрашивается через AJAX. –

0
public ActionResult PossibleRedirectAction(bool isRedirect = false) 
{ 
    ViewBag.IsRedirect = isRedirect; 
} 

И поместить этот код в действии, из которого вы перенаправив:

RedirectToAction("PossibleRedirectAction", new {isRedirect = true}); 
+0

Это решение будет применимо, если я буду перенаправлять действие вручную. Но в моем случае перенаправление на страницу «Вход» происходит автоматически. – Serhiy

+0

Возможно, вы хотите проверить returnUrl? – karaxuna

+0

Ну, после запроса добавлен заголовок ответа HTTP «Местоположение». Но я не вижу, где я могу это проверить. – Serhiy

 Смежные вопросы

  • Нет связанных вопросов^_^