我在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" }
});
}
}
此致 阿西夫
答案 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;