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。