Это пример демо, который я создал, чтобы попытаться объяснить себе об атрибуте VaryByParam из OutputCache:OutputCache, чтобы работать
разметке:
<%@ 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. Но когда я нажимаю на третью кнопку, она делает ча che page для ABCD = 3. Я ожидал, что страница не должна кэшироваться для ABCD = 3, потому что я не указал ее в VaryByParam. Я получаю тот же dateTime, когда я повторно нажимаю на третью кнопку.
EDIT START: Я также попытался это так:
разметке:
<%@ 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 после того, как я нажму пару раз. Какое-то странное поведение, которое я испытываю здесь.
EDIT END
Пожалуйста, пролить некоторый свет на то, что не так я делаю? Спасибо заранее.
Комментарии от кого-нибудь? –