我有一个ASP.net页面,其中包含用于过滤数据集的字段。当我应用过滤器(通过按钮)时,结果加载正常。如果我导航到另一个页面(在同一个会话中),然后返回到该页面,我将在页面加载时重新设置过滤器字段的值。
有时候,字段会重置正常,有时它们会变回空白。似乎没有任何真正的模式,他们什么时候回来好,当他们回来空白。是否有可能服务器正在缓存请求/响应? (IIS),如果没有,那么可能是什么问题?
答案 0 :(得分:7)
我同意其他人的说法,这是一个缓存问题。如果您没有发送相应的标题,则浏览器将缓存您的页面。例如,如果您使用浏览器的“后退”按钮返回到您的页面,那么这将由缓存加载,而不是从服务器加载。
为了验证这个位置在Page_Load方法中有一个断点并等待它被击中。要禁用缓存,您需要执行以下操作:
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.Add(new TimeSpan(-1,0,0));
Response.Expires = 0;
Response.CacheControl = "no-cache";
答案 1 :(得分:2)
对我来说更像是被浏览器缓存了。尝试在页面的HTML中包含no-cache metas。
答案 2 :(得分:1)
您如何回到初始页面,通过“后退”按钮或单击链接返回到该页面?使用“后退”按钮时,除非删除页面上的缓存,否则服务器端代码并不总是运行。
答案 3 :(得分:1)
如果你没有使用Ajax(因此,浏览器与检索数据没有任何关系),它似乎是由于缓存或加载数据的方式错误
作为第一个测试,我会向页面添加一个简单的内容,并在Page_Load方法上将日期和时间写入其中。如果它有效,你绝对可以忽略缓存作为问题的根源。
现在,如果代码中存在问题,您是否依赖于Cookie(会话变量),URL参数或使用该应用时可能更改的任何其他信息?
答案 4 :(得分:0)
答案 5 :(得分:0)
是否可能在运行填充字段值的代码之前或期间抛出异常?
答案 6 :(得分:0)
一个相当快速的方法来判断正在发生的事情是在你从会话中检索内容的行中抛出一些断点,然后解决它的问题。
如果它发生在您看到会话中的内容被拉出来并且没有其他有趣的业务正在进行(例如美味异常被吞没到某个地方)之后,那么这意味着它是一个浏览器缓存问题(并且很好)好运!)
答案 7 :(得分:0)
以某种方式缓存ViewState。如果它不是您的浏览器,那么您是否通过执行某些缓存的代理服务器进行连接 你还确定你没有使用InProc以外的东西进行会话状态吗?
答案 8 :(得分:0)
尝试通过查询字符串在您的网页之间传递“过滤器”。
这将是一个很好的方法来证明(一种方式)问题在于缓存/状态,你可以看到实际传递的是什么