Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 为什么自定义MVC3操作筛选器可以在一个控制器操作上工作,而不能在另一个控制器操作上工作?_Asp.net Mvc 3_Actionfilterattribute - Fatal编程技术网

Asp.net mvc 3 为什么自定义MVC3操作筛选器可以在一个控制器操作上工作,而不能在另一个控制器操作上工作?

Asp.net mvc 3 为什么自定义MVC3操作筛选器可以在一个控制器操作上工作,而不能在另一个控制器操作上工作?,asp.net-mvc-3,actionfilterattribute,Asp.net Mvc 3,Actionfilterattribute,情况是这样的。我在两个不同的控制器中使用了一个动作过滤器。操作筛选器定义为: public class ValidSubmissionAttribute : FilterAttribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { } public void OnActionExecuting(ActionExecutingContex

情况是这样的。我在两个不同的控制器中使用了一个动作过滤器。操作筛选器定义为:

public class ValidSubmissionAttribute : FilterAttribute, IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var controller = filterContext.Controller;
        var session = filterContext.HttpContext.Session;
        var isValid = controller.TempData["IsValid"];
        if (isValid == null || !(bool)isValid)
        {
            SharedUtilities.LogOutUser(session, controller.ViewData.ModelState);
            filterContext.Result = SharedUtilities.GetThankYouRedirect();
        }
    }
}
当我在一个控制器中调用该属性时,如下所示:

    [HttpPost]
    public ActionResult DoSomething(string button, Model data)
    {
        try
        {
            if (ModelState.IsValid)
            {
                TempData["IsValid"] = 
                   Request.Form["ValidRequest"] == Session.SessionID;
                Session["VerifyDoingSomethingData"] = data;
                return RedirectToAction("VerifyDoingSomething");
            }

         }
        catch (Exception ex)
        {
        }
    }

    [ValidSubmission]
    public ActionResult VerifyDoingSomething()
    {
        ViewData.Model = Session["VerifyDoingSomethingData"];
        return View("VerifyDoingSomething");
    }
    [HttpPost]
    public ActionResult Index(string button, Model data)
    {
        try
        {
            if (ModelState.IsValid)
            {
                TempData["IsValid"] = 
                    Request.Form["ValidRequest"] == Session.SessionID;
                Session["ViewModel"] = data;
                return RedirectToAction("VerifyCancellation");
            }

        }
        catch (Exception ex)
        {
        }
    }

    [ValidSubmission]
    public ActionResult VerifyCancellation()
    {
        ViewData.Model = Session["ViewModel"];
        return View("VerifyCancellation");
    }
它的功能与预期一样。但是,当我从不同的控制器调用它时,如下所示:

    [HttpPost]
    public ActionResult DoSomething(string button, Model data)
    {
        try
        {
            if (ModelState.IsValid)
            {
                TempData["IsValid"] = 
                   Request.Form["ValidRequest"] == Session.SessionID;
                Session["VerifyDoingSomethingData"] = data;
                return RedirectToAction("VerifyDoingSomething");
            }

         }
        catch (Exception ex)
        {
        }
    }

    [ValidSubmission]
    public ActionResult VerifyDoingSomething()
    {
        ViewData.Model = Session["VerifyDoingSomethingData"];
        return View("VerifyDoingSomething");
    }
    [HttpPost]
    public ActionResult Index(string button, Model data)
    {
        try
        {
            if (ModelState.IsValid)
            {
                TempData["IsValid"] = 
                    Request.Form["ValidRequest"] == Session.SessionID;
                Session["ViewModel"] = data;
                return RedirectToAction("VerifyCancellation");
            }

        }
        catch (Exception ex)
        {
        }
    }

    [ValidSubmission]
    public ActionResult VerifyCancellation()
    {
        ViewData.Model = Session["ViewModel"];
        return View("VerifyCancellation");
    }
该属性根本不运行。OnActionExecuting方法中的断点未被命中


如果非要我猜的话,我会说控制器或动作方法有些不同,但它们在功能上似乎相似。有什么见解吗?为什么我会看到如此不同的行为?

aaaa而且,我是个笨蛋


结果是有一个完全不同的执行路径,我已经忘记了。该路径没有要在ValidSubmisionAttribute中使用的TempData信息。现在一切都正常运行。

是否有任何BaseController继承到一个控制器而不是另一个控制器,并且限制了此行为。不幸的是,没有。它们都继承自同一个BaseController。