首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 站點導航進階:程式化控制 SiteMap 資料與 SiteMapPath 控制項深度應用

     編輯:關於ASP.NET

ASP.NET 2.0 站點導航架構不僅提供宣告式控制項,更開放豐富的程式化 API,讓開發者動態查詢、修改、擴充站點地圖資料。本文深入探討 SiteMap 類別核心成員、SiteMapResolve 事件應用,以及 SiteMapPath(麵包屑)控制項的客製化技巧。

SiteMap 核心靜態屬性與方法

成員說明
CurrentNode目前頁面對應的 SiteMapNode,若無對應節點回傳 null。
RootNode站點地圖根節點,遞迴 ChildNodes 可走訪完整樹狀結構。
Provider預設 SiteMapProvider 實例(通常為 XmlSiteMapProvider)。
Providers所有已註冊提供者集合,鍵為提供者名稱。
FindSiteMapNode(url)依相對/絕對 URL 查找對應節點。
FindSiteMapNodeFromKey(key)依提供者內部鍵值查找節點。

SiteMapNode 關鍵屬性與方法

  • Title、Description、Url、Roles:對應 XML 屬性。
  • ParentNode、ChildNodes、NextSibling、PreviousSibling:樹狀導覽。
  • Item[key]:存取自訂屬性(如 target、icon)。
  • IsAccessibleToUser(context):安全性修剪檢查。

SiteMapResolve 事件:動態修飾節點

在 Global.asax 或頁面 Page_Load 訂閱:

void Application_Start()
{
    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(OnSiteMapResolve);
}

SiteMapNode OnSiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
    SiteMapNode current = SiteMap.CurrentNode.Clone(true); // 深層複製避免修改快取
    if (current != null)
    {
        // 動態帶入查詢字串參數
        current.Url += "?user=" + Context.User.Identity.Name;
        // 或依權限動態調整標題
        if (Context.User.IsInRole("Admin"))
            current.Title += " (管理員)";
    }
    return current;
}

此事件在導航控制項繫資料前觸發,回傳修飾後的節點樹將用於呈現。

SiteMapPath 控制項深度客製化

樣式屬性完整對照

樣式屬性套用目標
PathSeparatorStyle分隔符號(預設 >)
CurrentNodeStyle目前頁面節點
RootNodeStyle根節點(通常為 Home)
NodeStyle中間路徑節點
PathDirectionRootToCurrent(預設)或 CurrentToRoot

範本化客製化

<asp:SiteMapPath ID="SiteMapPath1" runat="server" PathDirection="RootToCurrent">
  <PathSeparatorTemplate>
    <span class="separator"> » </span>
  </PathSeparatorTemplate>
  <CurrentNodeTemplate>
    <span class="current"><%# Eval("Title") %></span>
  </CurrentNodeTemplate>
  <RootNodeTemplate>
    <asp:HyperLink NavigateUrl="~/" Text="首頁" />
  </RootNodeTemplate>
  <NodeTemplate>
    <asp:HyperLink NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' />
  </NodeTemplate>
</asp:SiteMapPath>

程式化建構動態站點地圖

繼承 StaticSiteMapProvider 實作 BuildSiteMap(),從資料庫、Web Service、CMS API 動態建構節點樹,配合快取機制(HttpRuntime.Cache)提升效能。適用於:

  • 內容管理系統動態選單。
  • 多租戶網站租戶專屬導航。
  • 依使用者角色/偏好個人化選單。

最佳實務提醒

  • SiteMap.CurrentNode 可能為 null(非站點地圖內頁面),使用前必須檢查。
  • SiteMapResolve 回傳節點務必 Clone(true),避免污染提供者內部快取樹狀結構。
  • 大型站點地圖建議分割多提供者,避免單一 XML 檔案過大影響啟動效能。
  • 自訂屬性命名建議加前綴(如 custom:icon)避免衝突。

掌握程式化 SiteMap API,讓導航架構從靜態定義進化為動態、智慧、個人化的使用者導覽體驗核心。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved