1

私はこのようなベースコントローラーを持っています

  [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
4

2 に答える 2

4

OnActionExecutingController アクションの前に実行され、 ではなく実行されるものを探していると思いますOnActionExecuted

これはうまくいくはずです:

protected override void OnActionExecuting(ActionExecutingContext filterContext) {
    filterContext.Controller.ViewData["Actions2"]) = true;
}
于 2012-05-29T11:11:49.860 に答える
1

ViewData次のように取得する必要がありますFilterContext

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

アップデート :

更新後ViewData["Actions2"]、値を設定する前にアクセスしようとしていることに気付きました。

したがってOnActionExecutingOnActionExecuted値がViewData

于 2012-05-29T11:14:01.240 に答える