In questo caso è possibile utilizzare un attributo del filtro azione personalizzato che apre un popup se l'utente non è autorizzato.
In questo filtro azione è sufficiente verificare se l'utente è connesso e aggiungere un valore booleano alla raccolta ViewData.
Applica l'attributo all'azione del controller.
Quindi nella pagina master aggiungere il rendering condizionale del codice che apre il popup.
Il codice per l'attributo:
[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;
}
}
Nella pagina master o un altro punto di vista comune aggiungere resa condizionale:
<% if((bool)(ViewData["OpenAuthorizationPopup"] ?? true)) { %>
...Your code to open the popup here...
<% } %>
fonte
2010-02-01 09:10:54
Quale versione di ASP.NET MVC stai usando? –