У меня есть две страницы ASPX; они используют одну и ту же DLL и класс, поэтому первая строка каждого файла выглядит так:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomPage.aspx.cs" Inherits="CustomPageCode.CustomPage" %>
(может быть, это плохо, когда две * .aspx страницы совместно используют один и тот же код, но я не хочу иметь два отдельных класса с одинаковым кодом)
Я «настраиваю» каждую страницу через скрытое поле -
Page1.aspx
имеет строку:
<asp:HiddenField ID="DepartmentName" value="DepartmentOne" runat="server" />
и Page2.aspx
имеют строку:
<asp:HiddenField ID="DepartmentName" value="DepartmentTwo" runat="server" />
Мой CodeBehind читает DepartmentName.Value
, чтобы выполнить кучу кодовых заданий, таких как запросы SQL, на основе значения HiddenField, специфичного для каждого отдела, а также Javascript считывает это значение для выполнения задач, специфичных для отдела. Я делаю это таким образом, чтобы упростить настройку каждой страницы - способ настройки страницы находится прямо на странице ASPX, и одно и то же значение видно и для ASPX, и для Javascript.
Однако, если на любой странице происходит событие POST
- теперь DepartmentName.Value
ТОЛЬКО возвращает значение со страницы, которая выполнила POST для любой страницы с таким же кодовым указателем. Page1.ASPX
, хотя значение asp:HiddenField
в источнике по-прежнему явно "DepartmentOne
", если Page2.ASPX
сделал POST, DepartmentName.Value
будет "DepartmentTwo
" независимо от того, какая страница открыта.
Интересная вещь: если я открою ту же страницу в Chrome, у первой страницы все равно будет DepartmentName.Value
у второй страницы, даже если событие POST никогда не происходило в Chrome; очистка кеша IE тоже не исправит. Это определенно происходит на стороне сервера, где-то кешируется. Сброс IIS разрешает это.
Google сказал мне, что ASP.NET кэширует кучу вещей из события POST, но точно не говорит, как он обрабатывается, или как его включать / отключать, или в каком из множества мест кэша он находится, и многие примеры выглядят так, как будто я должен специально указать это, чтобы начать постоянное кэширование. Самое близкое, что я нашел, это ModelState.Clear();
в !IsPostBack
в начале Page_Load
, но это не решает проблему, я не использую MVC в своем коде, насколько я знаю.
Итак, мой вопрос: как заставить GET использовать скрытое значение в исходном коде, а не какое-то кэшированное значение из старого события POST?