【问题标题】:Output cache for page that varies by several DropDownList controls因多个 DropDownList 控件而异的页面的输出缓存
【发布时间】:2016-05-21 15:20:31
【问题描述】:
有没有办法对因多个 DropDownList 控件而异的页面使用输出缓存?
我考虑过使用缓存变量来缓存页面的几个元素,并根据我从代码隐藏的 DDL 中获得的值来读取它们。但问题是我不希望数据被缓存“Forerver”,也不想改变整个站点的默认缓存时长。
我知道对于 outputcache,我可以决定特定页面的缓存超时时间,所以我认为这是最好的解决方案,但是我在使用多个 DDL 实现它时遇到了问题。
This question 谈到使用VaryByParam,但这不是我需要的。
【问题讨论】:
标签:
c#
asp.net
caching
outputcache
【解决方案1】:
在 ASP.NET 中,第一次加载页面时(IsPostBack false;HTTP 方法 = GET),它将为您的 DDL 设置初始默认值。
当用户更改DDL值并提交页面时,使用HTTP POST方法提交,IsPostBack为真。使用 HTTP POST 方法的请求不会被缓存。
您可以通过以下方式实现您想要的目标。这适用于单个 DDL,但可以扩展到多个 DDL。
在您的 DDL 上设置 AutoPostBack = true
处理SelectedIndexChanged事件,并在修改URL以添加/更新查询字符串参数(例如...&MyDDLIndex=4...)后重定向(Response.Redirect)到同一页面。
-
首次加载页面时 (IsPostBack = false),根据您的自定义查询字符串值初始化 DDL 的 SelectedIndex 属性,如果查询字符串值丢失或无效,则使用合适的默认值。
通过这样做,您将为所需的每个 DDL 设置组合获得一个新 URL。例如。使用三个 DDL,您的 URL 可能如下所示:
`...MyPage.aspx?MyDDL1Index=2&MyDDL2Index=4&MyDDL3Index=5...`
您现在对每个 DDL 值组合都有唯一的 URL,并且可以使用 VaryByParam 根据这些查询字符串值缓存此页面的版本。