ASP.NET 2.0 內建的 Menu 控制項搭配 SiteMap 檔案,能輕鬆建立網站導航結構。但預設情況下,Menu 控制項無法控制連結的開啟方式(例如在新視窗或框架中開啟),這在實務開發中常造成困擾。其實只需透過 SiteMapNode 的自訂屬性與 MenuItemDataBound 事件,即可輕鬆實現目標視窗控制。
在站點地圖節點中加入 target 屬性,指定連結開啟目標(如 _blank、_self、_parent、_top 或自訂框架名稱)。
<siteMapNode title="首頁" description="" target="_blank" url="~/Default.aspx" />
在後置程式碼中撰寫事件處理邏輯,讀取 SiteMapNode 的 target 屬性並指派給 MenuItem 的 Target 屬性。
protected void MyMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
string target = ((SiteMapNode)e.Item.DataItem)["target"];
if (!string.IsNullOrEmpty(target))
{
e.Item.Target = target;
}
}
當 Menu 控制項繫結 SiteMap 資料來源時,每個選單項目都會觸發 MenuItemDataBound 事件。此時 e.Item.DataItem 即為對應的 SiteMapNode 物件,透過索引器存取自訂屬性 target,若存在且非空,便設定給 MenuItem.Target。瀏覽器渲染產生的錨點標籤將包含 target="_blank" 等屬性,從而實現新視窗開啟。
target。DataSourceID 指向正確的 SiteMapDataSource。這項技巧不僅解決了新視窗開啟需求,也展示了 ASP.NET 2.0 導航架構的擴充彈性。開發者可依此模式擴充更多自訂屬性(如 CSS 樣式、圖示、權限角色等),豐富導航控制項的表現力。