这是我创建的示例演示,用于尝试解释 OutputCache 的 VaryByParam 属性:
标记:
<%@ OutputCache Duration="10" VaryByParam="ID" %>
<asp:Button ID="SetQueryStringButton1" runat="server"
Text="Set query string ID=1 and redirect"
PostBackUrl="~/OutputCachingUsingQueryString/Default.aspx?ID=1" />
<br />
<asp:Button ID="SetQueryStringButton2" runat="server"
Text="Set query string ID=2 and redirect"
PostBackUrl="~/OutputCachingUsingQueryString/Default.aspx?ID=2" />
<br />
<asp:Button ID="SetQueryStringButton3" runat="server"
Text="Set different query string and redirect"
PostBackUrl="~/OutputCachingUsingQueryString/Default.aspx?ABCD=3" />
代码隐藏:
if (IsPostBack)
{
string key = Request.QueryString.GetKey(0);
MessageLabel.Text = "The value of query string " + key + " is : " + Request.QueryString[key] + "<br/>";
MessageLabel.Text += DateTime.Now.ToLongTimeString();
}
当我单击前两个按钮时,根据 VaryByParam 的定义,它会缓存 ID = 1 和 ID = 2 的页面。但是当我单击第三个按钮时,它会缓存 ABCD = 3 的页面。我所期待的是否不应该为 ABCD=3 缓存页面,因为我没有在 VaryByParam 中指定它。当我重复单击第三个按钮时,我得到相同的 dateTime。
编辑开始:我也这样尝试过:
标记:
<%@ OutputCache Duration="10" VaryByParam="ID" %>
<asp:Label ID="MessageLabel" runat="server"/><br/>
<a href="Default.aspx?ID=1">Click Me and pass ID=1</a><br/>
<a href="Default.aspx?ID=2">Click Me and pass ID=2</a><br/>
<a href="Default.aspx?ABCD=3">Click Me and pass ABCD=3</a><br/>
代码隐藏:
if (!IsPostBack)
{
if (Request.QueryString.Keys.Count > 0)
{
string key = Request.QueryString.GetKey(0);
MessageLabel.Text = "The value of query string: " + key + " is: " + Request.QueryString[key] + "<br/>";
MessageLabel.Text += DateTime.Now.ToString();
}
}
当我单击第三个时,它会在我单击几次后显示 MessageLabel。我在这里遇到了某种奇怪的行为。
编辑结束
请阐明我做错了什么?提前致谢。