非静态方法或属性'System.Web.MVC.ControllerContext.Controller.get'需要对象引用

时间:2011-10-06 17:58:15

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

我在asp.net MVC 3应用程序的Model文件夹中创建了一个类,并在其中使用了以下代码

   var controller = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

但它带有下划线并说:非静态方法或属性

需要对象引用
  

'System.Web.MVC.ControllerContext.Controller.get'

如何摆脱这个错误。

以下是完整代码:

public void OnAuthorization(AuthorizationContext filterContext)
        {
            var user = (CreditRegistryPrincipal)filterContext.HttpContext.User;
            if (!user.IsAdminAuthorized)
            {
                var controller = System.Web.Mvc.ControllerContext ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;

                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { 
                    { "controller", "Admin" }, 
                    { "action", "adfdsf" } 
                });
            }
        }

此致 阿西夫

2 个答案:

答案 0 :(得分:0)

这一行:

var controller = System.Web.Mvc.ControllerContext ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;

在语法上不是有效的,所以我希望有一个不同的编译错误(;预期)。

不确定为什么要尝试在模型中访问ViewContext。据推测,它实际上是一个自定义授权属性?

你试过了吗?

var controller = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;

System.Web.Mvc.ControllerContext controller = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;

答案 1 :(得分:0)

您需要使用传递给OnAuthorization函数的filtercontext。所以你应该能够改变这个:

var controller = System.Web.Mvc.ControllerContext ViewContext.Controller.ValueProvider.GetValue("controller").RawValue;

To This:

var controller = filterContext.Controller.ValueProvider.GetValue("controller").RawValue;