在我的 MVC 4 Web 应用程序中,我要求用户在使用该应用程序一定天数后选择一种付款方式。
我通过创建一个控制器基类并让我的所有控制器都继承自它来实现这一点。基类具有以下代码:
public class MyBaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (WebSecurity.IsAuthenticated)
{
var pay = PaymentDetails.LoadByMember(WebSecurity.CurrentUserId);
if (pay.ForceToChooseMandate)
{
filterContext.Result = RedirectToAction("Choose", "Payment");
}
}
base.OnActionExecuting(filterContext);
}
}
该Choose
操作具有允许您设置付款详细信息或推迟选择一段时间的链接。如果访问了这些链接中的任何一个,则在后续调用中pay.ForceToChooseMandate
返回false
,从而允许用户恢复应用程序的正常操作。
第一次访问动作时,OnActionExecuting
触发并且重定向工作正常。但是,如果用户第二次访问该操作,OnActionExecuting
则永远不会触发,并且他们会Choose
再次被重定向到该操作,即使这次pay.ForceToChooseMandate
会为他们评估false
。
但是,如果他们访问以前未访问过的操作,则会OnActionExecuting
按预期触发。
我怎样才能阻止这种情况的发生,并且OnActionExecuting
一直开火,这样它才能始终反映用户的当前状态?