#c# #asp.net #.net #asp.net-mvc #asp.net-mvc-3
#c# #asp.net #.net #asp.net-mvc #asp.net-mvc-3
Вопрос:
Я столкнулся с проблемой, которую, похоже, не могу исправить или даже обойти. На мой взгляд, у меня есть следующее:
@Html.Hidden("IsLocked", (Session["IsLocked"]) ? "true" : "")
Переменная Session[«isLocked»] установлена в моем BaseController, от которого наследуют все остальные контроллеры. Однако я обнаружил, что если я посещаю страницу, и она в данный момент не заблокирована, и выполняю операцию блокировки и возвращаюсь к ней, это не изменит значение «заблокировано».
Кажется, я не могу понять, почему он не меняется, даже если значение сеанса изменилось?
Ответ №1:
Похоже, вы столкнулись с проблемой кэширования, поскольку страницы кэшируются с их начальным значением, и, несмотря на изменение значения, при запросе страницы она просто извлекается из кэша.
Вы можете использовать атрибут OutputCache, чтобы помочь отключить кэширование для этих целей. Следующее гарантирует, что ваши действия / страницы не кэшируются и что данные всегда «свежие»:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
public abstract class BaseController : Controller
Вышеуказанное можно поместить поверх любого контроллера или действия, чтобы отключить кэширование для этого конкретного события. (В приведенном выше контексте, если поместить его в BaseController, это эффективно отключит кэширование для каждого контроллера, производного от BaseController)