2012-05-29 1 views
1

J'ai un BaseController comme celui-ciViewData de ActionFilter ne sont pas disponibles dans la propriété du contrôleur de base

[Action] 
    public abstract class ApplicationController : Controller 
    { 
    public bool HasRight { get { return ((bool)ViewData["Actions2"]); } }   
    ......... 
    } 

attribut action

public class ActionAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.Controller.ViewData["Actions2"]=true; 
     ......... 
    } 

} 

Quand j'appelle une vue de certains contrôleur je reçois exception nulle à

public bool HasRight { get { return ((bool)ViewData["Actions2"]); } } as ViewData is null 

Répondre

2

Je pense que vous cherchez OnActionExecuting qui est exécuté avant votre C action de l'opérateur et non OnActionExecuted.

Cela devrait fonctionner:

protected override void OnActionExecuting(ActionExecutingContext filterContext) { 
    filterContext.Controller.ViewData["Actions2"]) = true; 
} 
1

Vous devez obtenir ViewData du FilterContext Comme ceci:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["Actions2"] = true; 
     base.OnActionExecuting(filterContext); 
    } 

Mise à jour:

Après votre mise à jour je me rends compte d que vous essayez d'accéder à ViewData["Actions2"] avant de définir la valeur.

vous devez donc utiliser OnActionExecuting au lieu de OnActionExecuted pour faire en sorte que la valeur a été fixée à la ViewData

+0

Désolé qui était faute de frappe, je reçois vidéotex de filtercontext – Tassadaque

Questions connexes