2013-02-28 56 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 2013-02-28 10:22:44

+0

你可以給任何示例代碼嗎?我正在檢查它與會話..是不正確的? – 2013-02-28 10:26:37

回答

0

處理程序在每個數據綁定事件上執行。這個事件通常不會在每個帖子後面執行,因爲一旦在跟蹤ViewState之後設置了圖像url,它會在控件的ViewState中執行。

這意味着如果未明確調用控件(菜單)的DataBind(),則不會觸發此事件。

這至少是其他數據綁定控件的功能。例如,除了分頁/排序等 - >需要重新構建狀態的操作時,Grid不會在每個回發頁面上重新綁定自身。

+0

是的,但我可以看到每個帖子後面都重繪了自己的菜單。這看起來很糟糕,並且感覺頁面很慢。 – 2013-02-28 10:38:32

+0

當然你有。整個頁面在回發後重新繪製。我不確定你在這裏擔心什麼?如果您擔心圖像的加載時間較慢,您可以將它們兌現或將輸出緩存用於頁面的菜單區域。 http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.71).aspx – rusev 2013-02-28 11:00:45