重定向到一个全新的页面

时间:2013-05-22 11:07:46

标签: asp.net-mvc

我有一个属性SessionEndAttribute,用于检查会话是否处于活动状态。它附在每个动作上。

如果会话已过期,则会运行此方法:

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

但有时响应不是通往新页面的路径(例如路线“/帐户/登录”),而只是弹出窗口或部分视图,它可能只是一个容器div。

所以,问题是 - 我怎样才能始终重定向到新页面?

1 个答案:

答案 0 :(得分:0)

您必须告诉此特定的actionfilter仅运行完整的控制器操作而不是部分控制器操作[ChildActionOnly]

您还必须确保所有AJAX调用都使用[ChildActionOnly]调用。

should be a boolean property in the contextIsChildAction可以帮助您。

正如Andriy在评论中指出的那样,您还应该使用filterContext检查并确保ifilterContext.HttpContext.Request.IsAjaxRequest()没有执行AJAX请求

用法:

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