Фильтр действий для отображения условного простого сообщения - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать очень простую функцию для моей домашней работы.Особенность в том, что то, что вы можете назвать системной блокировкой, таким образом, это состояние блокировки (заблокировано или разблокировано и т. Д.) Хранится в базе данных сервера SQL.Так, например, если система заблокирована, я бы поместил желаемое сообщение в предупреждение при начальной загрузке и отобразил бы его в общем макете с помощью сеанса.Вот мое действие Filter Code

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 голосов
/ 20 февраля 2019

Это может показаться немного неуклюжим, но я попытался переместить переменную 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...