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

ASP.NET 頁面標題統一管理方案:MasterPage 整合 SiteMap 實作

     編輯:關於ASP.NET

解決 ASP.NET 2.0 網站中頁面標題分散硬編碼、多語言資源檔同步困難、導航控件與頁面標題不同步等問題,透過 MasterPage 集中管理,配合 Web.sitemap 實現標題統一維護與多重呈現需求。

核心痛點

  • 各頁面標題分散在 .aspx 或 .cs 中,維護成本高
  • 資源檔雖可集中,但導航控件(SiteMapPath)無法直接取用
  • 頁面標題欄需顯示「頁面名稱|站點名稱」,導航路徑僅需「頁面名稱」,程式碼端讀取 Page.Title 也不應含站點名稱

MasterPage 統一實作

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.searchDescription.Content = this.SearchDescription;
        this.searchKeywords.Content = this.SearchKeywords;
    }
    if (SiteMap.CurrentNode != null)
    {
        this.Page.Title = SiteMap.CurrentNode.Title;
    }
    else
    {
        this.Page.Title = "尚未在 Web.sitemap 配置此頁面導航";
    }
}

protected override void Render(HtmlTextWriter writer)
{
    this.Page.Title = this.Page.Title + " | " + Keyss.WebFramework.ConfigManager.GetInstance().SiteName;
    base.Render(writer);
}

關鍵設計解析

  1. Page_Load 設定基礎標題:從 SiteMap.CurrentNode.Title 取得純頁面標題,不含站點名稱。不放在 !IsPostBack 區塊,因 Page.Title 不保存 ViewState(疑似 2.0 Bug)。
  2. Render 覆寫附加站點名稱:在 Render 階段才加上「|站點名稱」,此時瀏覽器標題列已正確顯示完整標題,但程式碼端讀取 Page.Title 仍為原始值,且導航控件在更早階段繫結,自然不受影響。
  3. 生命週期利用:Render 不保存 ViewState,且 MasterPage 負責 <title> 輸出,後續 Page 的 Render 不會覆蓋結果。

Web.sitemap 範例

<siteMap>
  <siteMapNode title="首頁" url="~/Default.aspx">
    <siteMapNode title="會員中心" url="~/Member/">
      <siteMapNode title="用戶登錄" url="~/Member/Login.aspx" />
    </siteMapNode>
  </siteMapNode>
</siteMap>

支援多語言版本(Web.sitemap.zh-TW 等),配合 SiteMapProvider 實現本地化。

適用場景與優勢

  • 中大型網站統一標題管理
  • 多語言站點標題本地化
  • SEO 需要頁面標題與導航路徑差異化
  • 單一維護點,減少不一致風險
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved