页面的输出缓存因多个DropDownList控件

时间:2016-05-21 15:20:31

标签: c# asp.net caching outputcache

对于因多个DropDownList控件而异的页面,有没有办法使用输出缓存?

我考虑过使用Cache变量来缓存页面的几个元素,并根据我从代码隐藏中获取的DDL值来读取它们。但问题是,我不希望数据被缓存和#34; Forerver",而且我不想更改整个网站的默认缓存持续时间。

我知道对于outputcache,我会决定特定页面的缓存超时,所以我认为它是最好的解决方案,但我在使用多个DDL时遇到问题。

This question谈到使用VaryByParam,但这不是我需要的。

1 个答案:

答案 0 :(得分:1)

在ASP.NET中,第一次加载页面(IsPostBack false; HTTP方法= GET)时,它将为您的DDL设置初始默认值。

当用户更改DDL值并提交页面时,将使用HTTP POST方法提交,并且IsPostBack为真。使用HTTP POST方法的请求不会被缓存。

您可以实现以下目标的一种方式。这适用于单个DDL,但可以扩展到多个DDL。

  • 在DDL上设置AutoPostBack = true

  • 处理SelectedIndexChanged事件,并在修改URL以添加/更新查询字符串参数(例如Response.Redirect)后将其重定向(...&MyDDLIndex=4...)到同一页面。

  • 首次加载页面时(IsPostBack = false),根据自定义查询字符串值初始化DDL的SelectedIndex属性,如果查询字符串值丢失或无效,则使用合适的默认值

通过执行此操作,您将获得所需DDL设置组合的新URL。例如。如果有三个DDL,您可能会看到如下所示的网址:

`...MyPage.aspx?MyDDL1Index=2&MyDDL2Index=4&MyDDL3Index=5...`

现在,每个DDL值组合都有唯一的URL,并且可以使用VaryByParam根据这些查询字符串值缓存此页面的版本。