動態產生的MenuItem如何在MasterPage Postback後顯示為已選取

摘要:動態產生的MenuItem如何在MasterPage Postback後顯示為已選取

一般網頁資料庫程式,都會根據使用者權限來隱藏無存取權限的功能

如果使用MasterPage來動態產生MenuItem時,則會發現:

每次在MasterPage的Page_Load時,重新建立的MenuItem並不會執行Click事件!

因此當動態產生的Item被點選導向另一頁時,該Item的狀態並不會停留在已選擇.

 

固定產生的Item在Click之後會執行item_click事件,所以item.selected=true,如下圖所示:

 

動態產生的Item在Click之後不會執行item_click事件,所以item.selected=false,如下圖所示:

而每個MenuItem的NavigateUrl若是將MasterPage中的ContentPlaceHolder

導向另一個網頁,通常會先執行目標頁的Page_Load,再回來執行MasterPage的Page_Load

在導向之前,並沒有任何的事件可存下先前所按下的按紐是那一個MenuItem所發出的

因此只好利用被導向的網頁名稱(xxxxx.asp)及MenuItem.NavigateUrl來做判別

在重新建立完MenuItem後加入以下程式碼判別:

1 For Each Item As MenuItem In MainMenu.Items
2   If Item.NavigateUrl = System.IO.Path.GetFileName(Request.Url.ToString) Then
3     Item.Selected = True
4   End If
5 Next

如此,被選擇的Item若導向新的一頁,則會自動Item.Selected設成true,畫面上便可看到該按紐顏色呈現已選擇!