2013-02-28 2 views
0

У меня есть главная страница, содержащая строку меню. это меню связано с картой сайта с десятками вариантов. Я сделал это, чтобы отображать значки для каждого пункта меню.Отображение значков меню Asp.NET при каждой обратной передаче

protected void NavigationMenu_MenuItemDataBound(object sender, MenuEventArgs e) 
    { 
    SiteMapNode node = e.Item.DataItem as SiteMapNode; 

    if (!string.IsNullOrEmpty(node["imageUrl"])) 
     e.Item.ImageUrl = node["imageUrl"];  
    } 

Я понимаю, что на каждом посту, это событие будет срабатывать. Есть ли способ, которым я могу просто загрузить их один раз и никогда не загружать их снова?

+0

разместить его внутри пользовательского элемента управления и использовать кеш на нем – Aristos

+0

вы можете указать код примера? я проверяю его с сеансом .. это неверно? –

ответ

0

Обработчик выполняется на каждом связанном с данными событии. Это событие обычно не выполняется для каждого сообщения после того, как URL-адрес изображения задается после отслеживания ViewState, который он отправляет в ViewState элемента управления.

Это означает, что если элемент управления (меню) DataBind() явно не указан, это событие не будет запущено.

Это, по крайней мере, то, что делает другой элемент управления, связанный с данными. Например, Grid не ретранслирует себя на каждый пост, за исключением случаев, когда paged/sort и т. Д. -> операции, требующие повторной сборки состояния.

+0

Да, но я могу видеть меню, перерисовывающее себя на каждом посту. это выглядит плохо и дает ощущение, что страница медленная. –

+0

Конечно, да. Вся страница перекрашена на столбе назад. Я не уверен, что вы здесь делаете? Если вас беспокоит медленное время загрузки изображений, вы можете их обналичить или использовать выходной кэш для области меню на странице. http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.71).aspx – rusev

Смежные вопросы