Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 控制器中重写的OnActionExecuting中设置的值为空_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 控制器中重写的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

我创建了一个基本控制器类,该类重写OnActionExecuting,如下所示:

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);
    }
}

该死是时候休息一下了。至少可以说很尴尬。今晚不再有复制粘贴错误。我正在办理入住手续…谢谢。该死!!!是时候休息一下了。至少可以说很尴尬。今晚不再有复制粘贴错误。我正在办理入住手续……谢谢。