Почему Response.Кэш.SetNoStore() не будет работать в классе, производном от System.Web.UI.Page

#asp.net #dll #external #no-cache

#asp.net #dll #внешний #нет кэша

Вопрос:

Я работаю на сайтах регистрации как часть своей работы, и появляются шаблоны, которые я пытаюсь перенести в центральную BasePage DLL. Здесь я создал полезные и повторно используемые методы в прошлом, такие как методы, помогающие отправлять электронные письма и настройки внедрения зависимостей для Ninject.

Возможно, было бы полезно отметить, что BasePage это ссылка, которую я добавляю на веб-сайт.

В этом случае я хотел, чтобы сеанс истек, чтобы, когда кто-то использует событие возврата браузера, делегат не мог повторно отправить свою информацию.

Код, который я использую, это:

         // Stop Caching in IE
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

        // Stop Caching in Firefox
        Response.Cache.SetNoStore();
  

Это работает, поэтому я подумал, что было бы полезно иметь в моем BasePage классе метод, который я мог бы вызвать для отключения кэша, и сократить вызов для этого на странице до одной строки.

Проблема в том, я думаю, что это частично связано с тем, что BasePage это библиотека DLL, на которую ссылаются, если я использую вызов метода из моей BasePage библиотеки dll, кэш не отключается.

Кто-нибудь знает, есть ли способ, которым я могу использовать вызов этого метода из моей BasePage библиотеки dll, чтобы отключить кэш на странице, или я должен сохранить его локальным для веб-сайта?

ОБНОВЛЕНИЕ 07/07

Нашли кое-что интересное.

Несколько сайтов предлагают использовать переменную сеанса, чтобы определить, возвращается ли кто-либо на страницу. если это вы, то перейдите на страницу остановки.

Вам нужно, noCache чтобы страница повторно инициировала Page_Load событие

Но я также обнаружил: у меня есть страница, содержащая вышеупомянутый код, но у меня есть пользовательская проверка, которая должна попасть на сервер для проверки и возвращает ошибку проверки. При исправлении, чтобы значение было действительным, затем повторной отправке. Нажатие назад говорит о том, что срок действия страницы истек.

Итак, если я изменю всю проверку так, чтобы EnableClientScript было false, любая ошибка приведет к тому, что веб-сервер отключит время ожидания события кнопки возврата после его успешной отправки.

Это не исправляет проблему полностью, но это остановит людей, нажимающих назад в конкретном случае, когда они вводят недопустимое значение.

Приветствия

Luke

Комментарии:

1. Не должно иметь значения, находится ли код на базовой странице или на производной странице, или базовая страница находится в sperate DLL или нет. Вы уверены, что код вызывается в обоих случаях, более вероятно, что какая-то логическая ошибка препятствует вызову метода базовой страницы, а не он не работает.

2. Это то, что я думал, код определенно вызывается, я проследил его до dll. По какой-либо причине это вызывает другое поведение. Я попробую еще раз завтра, возможно, он был кэширован, кто знает.