首页 > 解决方案 > 显示条件简单消息的操作过滤器

问题描述

我正在尝试为我的作业实现一个非常简单的功能。特点是你可以称之为系统锁,所以,这个锁状态(锁定或解锁等)存储在 sql server 数据库中。因此,例如,如果系统被锁定,我会将所需的消息放在引导警报中,并使用 session.xml 将其显示在共享布局中。这是我的操作过滤器代码

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;
    }

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

只有当我停止调试并重新开始调试时它才会正确。

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

标签: c#asp.net-mvc-3

解决方案


这可能听起来有点笨拙,但是,我试图将 lockMgr 变量移到 switch 语句的上方,它只是修复了它......

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);
    }
}

推荐阅读