防止缓存的一步(除了添加适当的标题等...)是在我的网址末尾添加一个随机数。
我正在使用ASP.NET菜单,并希望在每个菜单项的导航URL 中添加一个随机数,因为它被点击。
我可以在MenuItemDataBound事件中执行此操作,但在使用MenuItemClicked事件时也没有太多运气。
回答(8小时后无法回答我自己的问题,我没有时间等待那么久,所以这是我的服务器端解决方案。)
要执行此服务器端,我必须从菜单中删除站点地图和数据绑定。
我只是将站点地图中的所有项目作为menuitems添加到菜单标记中的项目集合中,删除了url属性。这里的关键是删除url属性。
<asp:menu>
<items>
<asp:menuitem Text="Home" ToolTip="Go Home" Selectable="True" />
</items>
</asp:menu>
然后在您的代码中,您可以处理MenuItemClicked事件(现在应该触发,因为标记中不再有导航)。
在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的服务器端解决方案。
答案 0 :(得分:1)
我不知道您是否考虑将客户端URL操作视为一种选择,但是在每个页面加载上运行这一点JavaScript会通过在每个页面上添加时间戳来为您提供所需的行为。链接。您可以将其修改为定位站点的特定区域/ div中的链接,但此示例将全部更改它们:
<!-- include the jQuery library -->
<script type="text/javascript">
$(function(){
var time = new Date().getTime();
$('a').each(function() {
var append = (this.href.indexOf('?') > -1 ? '&' : '?');
$(this).attr('href', this.href + append + 't=' + time.toString());
});
});
</script>
由于每次加载页面的时间戳都不同,您应该始终获得一组唯一的链接。
编辑这是一个有效的jsFiddle演示行为:http://jsfiddle.net/2HzqU/2/
答案 1 :(得分:0)
我认为这不是最好的解决方案。你尝试过这样的事情吗?
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();