У меня есть веб-приложение MVC2, в котором я только что реализовал некоторый код тайм-аута сеанса. В Global.asax
я добавил обработчик Session_End
, который проверяет, открыта ли запись для редактирования, и, если это так, отправляет вызов веб-службы во внешнюю систему для отката записи в хранилище, чтобы она не блокировалась в состояние «открыто для редактирования». Запись по-прежнему отображается в браузере пользователя, поскольку мы не можем отправить сообщение в браузер, чтобы закрыть запись.
Когда пользователь в следующий раз взаимодействует со страницей (теперь по тайм-ауту), например, чтобы обновить, отменить, сохранить или отправить его, веб-приложение видит, что пользователь не вошел в систему (сеанс истек, поэтому логин прошел вместе с ним), и перенаправляет на страницу входа.
На странице входа в систему я хочу отобразить сообщение, объясняющее, почему пользователь был перенаправлен, что-то вроде: «Время сеанса истекло; пожалуйста, войдите снова. Если у вас была открытая запись, она откатилась до прежнего состояния . "
Вопрос: из Global.asax
, где я могу сохранить сообщение, чтобы контроллер входа в систему или представление могли найти его при перенаправлении? Я не могу получить ссылку на ViewData
в Global.asax
. Когда я ссылаюсь на это как:
System.Web.Mvc.ViewPage<My...LoginViewModel>.ViewData["ErrorMessage"] = "Your session timed out..."
Я получаю сообщение об ошибке:
An object reference is required for the non-static field, method, or property 'System.Web.Mvc.ViewPage<My...LoginViewModel>.ViewData.get'
Возможно ли то, что я пытаюсь сделать, и я просто не знаю, как правильно ссылаться на ViewData
, или ViewData
недоступен для Global.asax
? В таком случае, какой мой лучший вариант для установки сообщения из Global.asax
для отображения в виде?