我有这样的基础控制器
[Action]
public abstract class ApplicationController : Controller
{
public bool HasRight { get { return ((bool)ViewData["Actions2"]); } }
.........
}
动作属性
public class ActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Controller.ViewData["Actions2"]=true;
.........
}
}
当我从某个控制器调用某个视图时,我在
处得到null异常public bool HasRight { get { return ((bool)ViewData["Actions2"]); } } as ViewData is null
答案 0 :(得分:2)
我认为您正在寻找在您的控制器操作之前执行的OnActionExecuting
,而不是OnActionExecuted
。
这应该有效:
protected override void OnActionExecuting(ActionExecutingContext filterContext) {
filterContext.Controller.ViewData["Actions2"]) = true;
}
答案 1 :(得分:1)
您需要从ViewData
获取FilterContext
,例如:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewData["Actions2"] = true;
base.OnActionExecuting(filterContext);
}
更新:
更新后我意识到您在设置值之前尝试访问ViewData["Actions2"]
。
因此,您应该使用OnActionExecuting
代替OnActionExecuted
来确保将值设置为ViewData