【问题标题】:ViewData of Actionfilter is not available in Base Controller propertyActionfilter 的 ViewData 在 Base Controller 属性中不可用
【发布时间】:2012-05-29 10:51:05
【问题描述】:

我有一个这样的基本控制器

  [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;
      .........
   }

} 

当我从某个控制器调用某些视图时,我在

处得到空异常
public bool HasRight { get { return ((bool)ViewData["Actions2"]); } } as ViewData is null

【问题讨论】:

    标签: .net asp.net-mvc asp.net-mvc-3 actionfilterattribute


    【解决方案1】:

    我认为您正在寻找在您的控制器操作之前执行的 OnActionExecuting,而不是 OnActionExecuted

    这应该可行:

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

    【讨论】:

      【解决方案2】:

      你需要从FilterContext得到ViewData 像这样:

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

      更新:

      更新后我意识到您在设置值之前尝试访问ViewData["Actions2"]

      因此您应该使用OnActionExecuting 而不是OnActionExecuted 以确保该值已设置为ViewData

      【讨论】:

      • 抱歉打错了我正在从 filtercontext 获取视图数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2011-01-27
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多