c# - 显示条件简单消息的操作过滤器
问题描述
我正在尝试为我的作业实现一个非常简单的功能。特点是你可以称之为系统锁,所以,这个锁状态(锁定或解锁等)存储在 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 但没有解决它
只有当我停止调试并重新开始调试时它才会正确。
欢迎任何关于更好方法或解决问题的想法。
解决方案
这可能听起来有点笨拙,但是,我试图将 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);
}
}
推荐阅读
- android - EditText 结束图标自动更改
- python - 字符串嵌入了 unicode 代码点,如何转换?蟒蛇 3
- selenium-firefoxdriver - 如何修复 org.openqa.selenium.remote.UnreachableBrowserException 原因:java.net.SocketTimeoutException:读取超时
- r - 想要用整数值填充长度为 10 的列向量
- r - Imports 字段中的命名空间未导入自:'plotly'
- python - 如何在检查特定列 Null 值时应用功能
- java - Start() 方法未运行 - Java
- javascript - 将 rTab 从 bs3 转换为 bs5
- android - 应用程序的数据在运行时变得清晰,应用程序再次在模拟器上重新安装,任何人都可以提出可能是什么问题
- java - 如何通过 SpringBoot 从 Keycloak 获取访问令牌?