我正在尝试为我的作业实现一个非常简单的功能。功能是您可以调用系统锁的东西,因此,此锁定状态(锁定或解锁等)存储在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);
}
}