2013-05-22 4 views
0

У меня есть атрибут SessionEndAttribute, который проверяет, жив ли сеанс. Он прикреплен к каждому действию.Переадресовать на новую страницу

Если сеанс истекло, он работает этот метод:

public override void OnActionExecuting(ActionExecutingContext filterContext) { 
    // do logout, clear cookies 
    filterContext.Result = new RedirectToRouteResult(..) 
} 

Но иногда ответ не маршрут на новую страницу (например, маршрут «/ Account/Login»), а просто всплывающее окно или частичное который может быть только контейнером div.

Итак, вопрос в том, как я могу всегда перенаправлять на новую страницу?

+2

Вы должны сказать конкретную actionfilter для выполнения только полных действий контроллера, а не действий частичного контроллера '[ChildActionOnly]'. Вы также должны убедиться, что все ваши вызовы AJAX используют вызовы '[ChildActionOnly]'. Прошло немного времени с тех пор, как я коснулся MVC, но это путь, который я бы спустил. там должно быть логическое свойство в контексте] (http://stackoverflow.com/questions/8060979/in-asp-net-mvc-3-what-is-filtercontext-ischildaction), 'isChildAction' или' ChildActionOnly' чтобы помочь вам. –

+0

@GeorgeStocker благодарит вас за полезный комментарий! –

ответ

0

Вы должны сообщить этому конкретному файлу действий только для выполнения действий полного контроллера, а не действий частичного контроллера. [ChildActionOnly].

Вы также должны убедиться, что все ваши вызовы AJAX используют вызовы [ChildActionOnly].

should be a boolean property in the context, IsChildAction, чтобы помочь вам.

Как Андрей отметил в комментарии, вы должны также проверить и убедиться, что filterContext не выполняется запрос AJAX, используя ifilterContext.HttpContext.Request.IsAjaxRequest()

Использование:

public override void OnActionExecuting(ActionExecutingContext filterContext) { 
    // do logout, clear cookies 
    if (!filterContext.IsChildAction && !filterContext.HttpContext.Request.IsAjaxRequest()) { 
     filterContext.Result = new RedirectToRouteResult(..) 
    } 
} 
+0

if (! FilterContext.IsChildAction &&! FilterContext.HttpContext.Request.IsAjaxRequest()) - это было бы лучше –

+0

@AndriyZakharko Вы абсолютно правы; Я полностью забыл о методе 'IsAjaxRequest()'. –

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