Asp.net mvc 3 控制器中重写的OnActionExecuting中设置的值为空
我创建了一个基本控制器类,该类重写OnActionExecuting,如下所示:Asp.net mvc 3 控制器中重写的OnActionExecuting中设置的值为空,asp.net-mvc-3,Asp.net Mvc 3,我创建了一个基本控制器类,该类重写OnActionExecuting,如下所示: public class BaseController : Controller { public string ActionName; public string ControllerName; protected override void OnActionExecuting(ActionExecutingContext filterContext) { Act
public class BaseController : Controller
{
public string ActionName;
public string ControllerName;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ActionDescriptor actionDescriptor = filterContext.ActionDescriptor;
string ActionName = actionDescriptor.ActionName;
string ControllerName = actionDescriptor.ControllerDescriptor.ControllerName;
base.OnActionExecuting(filterContext);
}
.
.
.
在控制器中,我想使用这些值
public class MyController : BaseController
{
public ActionResult Index(int page)
{
if (ActionName == null)
throw new Exception("ASP.NET MVC3 ABSURDLY GROTESQUE ERROR. CALL FOR REINFORCEMENTS! SERVER CORE ABOUT TO EXPLODE!!!");
.
.
.
首先调用OnActionExecuting并设置值。但是,每次到达控制器代码时,我的服务器内核都会爆炸…不要在
OnActionExecuting
方法中将string
放在这些变量之前,或者重新声明新的局部变量,并且字段保持为空且未分配:
public class BaseController : Controller
{
public string ActionName;
public string ControllerName;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var actionDescriptor = filterContext.ActionDescriptor;
ActionName = actionDescriptor.ActionName;
ControllerName = actionDescriptor.ControllerDescriptor.ControllerName;
base.OnActionExecuting(filterContext);
}
}
为了更好地封装,请使用以下属性:
public class BaseController : Controller
{
public string ActionName { get; private set; };
public string ControllerName { get; private set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var actionDescriptor = filterContext.ActionDescriptor;
ActionName = actionDescriptor.ActionName;
ControllerName = actionDescriptor.ControllerDescriptor.ControllerName;
base.OnActionExecuting(filterContext);
}
}
不要将
string
放在OnActionExecuting
方法中的那些变量之前,否则您将重新声明新的局部变量,并且您的字段保持为空且未赋值:
public class BaseController : Controller
{
public string ActionName;
public string ControllerName;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var actionDescriptor = filterContext.ActionDescriptor;
ActionName = actionDescriptor.ActionName;
ControllerName = actionDescriptor.ControllerDescriptor.ControllerName;
base.OnActionExecuting(filterContext);
}
}
为了更好地封装,请使用以下属性:
public class BaseController : Controller
{
public string ActionName { get; private set; };
public string ControllerName { get; private set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var actionDescriptor = filterContext.ActionDescriptor;
ActionName = actionDescriptor.ActionName;
ControllerName = actionDescriptor.ControllerDescriptor.ControllerName;
base.OnActionExecuting(filterContext);
}
}
该死是时候休息一下了。至少可以说很尴尬。今晚不再有复制粘贴错误。我正在办理入住手续…谢谢。该死!!!是时候休息一下了。至少可以说很尴尬。今晚不再有复制粘贴错误。我正在办理入住手续……谢谢。