Как добавить случайное число в URL-адрес пункта меню ASP.NET при каждом нажатии - PullRequest
1 голос
/ 24 августа 2011

Одним из шагов по предотвращению кэширования (помимо добавления соответствующих заголовков и т. Д.) Является добавление случайного числа в конец моих 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 (которое должно теперь сработать, поскольку в разметке больше нет navateurl).

В коде события 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 ]

1 голос
/ 24 августа 2011

Я не знаю, рассматриваете ли вы манипулирование URL-адресами на стороне клиента как вариант, но запуск этого небольшого JavaScript-кода при каждой загрузке страницы даст вам поведение, которое вы ищете, добавив временную метку к каждому из ссылки. Вы можете изменить его для нацеливания ссылок в определенную область / раздел сайта, но этот пример изменит их все:

<!-- 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/

0 голосов
/ 24 августа 2011

Не думаю, что это лучшее решение. Вы пытались использовать что-то вроде этого:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore(); 
...