【发布时间】:2013-02-05 03:51:46
【问题描述】:
情况是这样的。我有一个在两个不同控制器中使用的单个动作过滤器。动作过滤器定义为:
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();
}
}
}
当我在一个控制器中调用 Attribute 时,如下所示:
[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 方法中的断点没有被命中。
如果我不得不猜测,我会说控制器或操作方法存在一些差异,但它们似乎在功能上相似。有什么见解吗?为什么我会看到如此不同的行为?
【问题讨论】:
-
你有没有继承自一个控制器而不是另一个控制器的 BaseController,它限制了这种行为。
-
不幸的是,没有。它们都继承自同一个基本控制器。
标签: asp.net-mvc-3 actionfilterattribute