对于因多个DropDownList控件而异的页面,有没有办法使用输出缓存?
我考虑过使用Cache变量来缓存页面的几个元素,并根据我从代码隐藏中获取的DDL值来读取它们。但问题是,我不希望数据被缓存和#34; Forerver",而且我不想更改整个网站的默认缓存持续时间。
我知道对于outputcache,我会决定特定页面的缓存超时,所以我认为它是最好的解决方案,但我在使用多个DDL时遇到问题。
This question谈到使用VaryByParam
,但这不是我需要的。
答案 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根据这些查询字符串值缓存此页面的版本。