我正在尝试为我的作业实现一个非常简单的功能。 功能是您可以称之为系统锁定, 因此,此锁定状态(“锁定”或“未锁定”等)存储在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代替,但没有任何解决方法
只有当我停止调试并再次重新启动调试时,这才是正确的。
任何关于更好的方法或解决问题的想法都受到欢迎。
答案 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);
}
}