【发布时间】:2011-08-24 13:47:08
【问题描述】:
防止缓存的一个步骤(除了添加适当的标头等)是在我的 URL 末尾添加一个随机数。
我正在使用 ASP.NET 菜单,并希望在每个菜单项的导航 URL单击时添加一个随机数。
我可以在 MenuItemDataBound 事件中执行此操作,但在 MenuItemClicked 事件中执行此操作的运气并不好。
回答(8 小时无法回答我自己的问题,而且我没有时间等那么久,所以这是我的服务器端解决方案。)
要在服务器端执行此操作,我必须从菜单中删除站点地图和数据绑定。
我只是将站点地图中的所有项目作为菜单项添加到菜单标记中的项目集合中,删除了 url 属性。这里的关键是删除 url 属性。
<asp:menu>
<items>
<asp:menuitem Text="Home" ToolTip="Go Home" Selectable="True" />
</items>
</asp:menu>
然后在您后面的代码中,您可以处理 MenuItemClicked 事件(现在应该触发,因为标记中不再有 navigateurl)。
在 MenuItemClicked 事件代码隐藏中,我只需执行以下操作:
string TimeStamp = DateTime.Now.ToString("yyyyMMddHHmmssfffffff");
// get iframe control - must have 'runat=server' attribute
HTMLControl display = CType(this.FindControl("display"), HTMLControl);
// dispatch menuitem
switch (e.item.valuepath)
{
case "Home":
display.attributes("src") = "home.aspx?=" + TimeStamp()
break;
.
.
.
}
这是带有 iframe 的服务器端解决方案。
【问题讨论】:
-
添加标题还不够吗?这种做法是通过 AJAX 获取/发布来完成的,但对于常规的、每天可点击的 URL,它应该是不需要的。您是否遇到与缓存相关的问题?
-
似乎添加标头是不够的,因为代理服务器似乎仍在缓存页面。在与网络管理员交谈后,他建议添加随机数......
-
您是否需要将此作为服务器端解决方案?如果可以的话,你可以很容易地用一点 jQuery 将时间戳附加到你的 URL 客户端。
-
这可能是一个选择,我希望同时了解客户端和服务器端的解决方案。