我正在一个使用jquery模式对话框的网站上做各种事情,比如登录等.
然而;我们在使用这些问题时遇到了一个小问题..我们在许多操作方法上使用[Authorize]属性,所以如果用户没有登录并点击他们需要的路由,那么会发生什么被授权它显示登录页面,就像它假设,但显然这是一个模态.
解决方法
在这种情况下,您可以使用自定义操作过滤器属性,如果用户未获得授权,则会打开弹出窗口.
在此操作过滤器中,只检查用户是否已登录并向ViewData集合添加布尔值.
应用控制器动作的属性.
然后在母版页中添加打开弹出窗口的代码的条件渲染.
在此操作过滤器中,只检查用户是否已登录并向ViewData集合添加布尔值.
应用控制器动作的属性.
然后在母版页中添加打开弹出窗口的代码的条件渲染.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,Inherited = true,AllowMultiple = true)] public class PopupAuthorizeAttribute : AuthorizeAttribute { private void CacheValidateHandler(HttpContext context,object data,ref HttpValidationStatus validationStatus) { validationStatus = this.OnCacheAuthorization(new HttpContextWrapper(context)); } public override void OnAuthorization(AuthorizationContext filterContext) { bool isAuthorized = false; if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (this.AuthorizeCore(filterContext.HttpContext)) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; cache.SetProxyMaxAge(new TimeSpan(0L)); cache.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler),null); isAuthorized = true; } filterContext.Controller.ViewData["OpenAuthorizationPopup"] = !isAuthorized; } }
在母版页或其他常见视图中添加条件渲染:
<% if((bool)(ViewData["OpenAuthorizationPopup"] ?? true)) { %> ...Your code to open the popup here... <% } %>