如何在每次单击时向ASP.NET菜单项URL添加随机数

时间:2011-08-24 13:47:09

标签: asp.net menu menuitem

防止缓存的一步(除了添加适当的标题等...)是在我的网址末尾添加一个随机数。

我正在使用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的服务器端解决方案。

2 个答案:

答案 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();