操作过滤器显示有条件的简单消息



我正在尝试为我的作业实现一个非常简单的功能。功能是您可以调用系统锁的东西,因此,此锁定状态(锁定或解锁等)存储在SQL Server数据库中。因此,如果系统锁定,例如,我然后将所需的消息放入Bootstrap警报中,然后使用会话将其显示在共享布局中。这是我的操作过滤代码

public class DisplayLockAlert : ActionFilterAttribute
{
    MasterLockMgr lockMgr = new MasterLockMgr(new MvcFertilizerEntities(), Membership.GetUser());
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        switch (lockMgr.GetMasterLockStatus())
        {
            case Status.Locked:
                filterContext.HttpContext.Session.Add(AlertMessages.Key_Locked, AlertMessages.System_Locked);
                break;
            default:
                filterContext.HttpContext.Session.Remove(AlertMessages.Key_Locked);
                break;
        }
        base.OnResultExecuting(filterContext);
    }
}

这是检索锁状态的代码

public string GetMasterLockStatus()
    {
        return db.Master_Lock.OrderBy(l => l.ID).FirstOrDefault().Lock_Status;
    }

但是,由于某种原因,发生了一些奇怪的事情,尽管我已更改了数据库中的锁定状态,但开关情况总是返回相同的结果。我试图将其从OnationExecuting更改为OnResultExeCuting,甚至尝试使用If/else,但没有解决它

,只有当我停止调试并重新开始调试时才是正确的。

欢迎有关更好方法或解决问题的任何想法。

这听起来可能有些笨拙,但是,我试图将锁定的锁定变量移至上方,然后将其修复了...

public class DisplayLockAlert : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        MasterLockMgr lockMgr = new MasterLockMgr(new MvcFertilizerEntities(), Membership.GetUser());
        switch (lockMgr.GetMasterLockStatus())
        {
            case Status.Locked:
                filterContext.HttpContext.Session.Add(AlertMessages.Key_Locked, AlertMessages.System_Locked);
                break;
            default:
                filterContext.HttpContext.Session.Remove(AlertMessages.Key_Locked);
                break;
        }
        base.OnActionExecuted(filterContext);
    }
}

最新更新