解決 ASP.NET 2.0 網站中頁面標題分散硬編碼、多語言資源檔同步困難、導航控件與頁面標題不同步等問題,透過 MasterPage 集中管理,配合 Web.sitemap 實現標題統一維護與多重呈現需求。
Page.Title 也不應含站點名稱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);
}
SiteMap.CurrentNode.Title 取得純頁面標題,不含站點名稱。不放在 !IsPostBack 區塊,因 Page.Title 不保存 ViewState(疑似 2.0 Bug)。Render 階段才加上「|站點名稱」,此時瀏覽器標題列已正確顯示完整標題,但程式碼端讀取 Page.Title 仍為原始值,且導航控件在更早階段繫結,自然不受影響。Render 不保存 ViewState,且 MasterPage 負責 <title> 輸出,後續 Page 的 Render 不會覆蓋結果。<siteMap>
<siteMapNode title="首頁" url="~/Default.aspx">
<siteMapNode title="會員中心" url="~/Member/">
<siteMapNode title="用戶登錄" url="~/Member/Login.aspx" />
</siteMapNode>
</siteMapNode>
</siteMap>
支援多語言版本(Web.sitemap.zh-TW 等),配合 SiteMapProvider 實現本地化。