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

时间:2019-02-20 03:53:12

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

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

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

但是,由于某种原因,发生了一些奇怪的事情, 尽管我更改了数据库中的锁定状态,但开关盒始终返回相同的结果。我试图将其从OnActionExecuting更改为OnResultExecuting,甚至尝试使用if / else代替,但没有任何解决方法

只有当我停止调试并再次重新启动调试时,这才是正确的。

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

1 个答案:

答案 0 :(得分:0)

这听起来可能有点笨拙,但是,我试图将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);
    }
}