Values set in overridden OnActionExecuting is null in controller
I have made a base controller class that overrides OnActionExecuting as follows:
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.ControllerDescri开发者_高级运维ptor.ControllerName;
base.OnActionExecuting(filterContext);
}
.
.
.
In a controller i want to use these values
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 is called first and the values are set. However, my server core explodes every time when reaching the controller code...
Don't put string
before those variables in the OnActionExecuting
method or you are redeclaring new local variables and your fields stay null and unassigned:
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);
}
}
And for better encapsulation use properties:
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);
}
}
精彩评论