程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET頁面中標題單點解決方案

ASP.NET頁面中標題單點解決方案

編輯:.NET實例教程
最近在使用.Net2.0中ms提供的頁面導航組件sitemappath時,想到了一種解決頁面標題不同步的一種簡單而又方便的機制。
  
    目前存在的問題:
  
    一、整個網站中ASPx頁面標題通常沒有統一的存放位置,針對每個頁面要麼把頁面標題直接硬編碼在頁面的aspx文件中,要麼通過ASPx.cs動態寫進去(1.1中還要加入額外的標題控件,2.0中可以使用Page.Title屬性),而整個站點如果網頁很多的話,這種重復邏輯的代碼就要寫很多次,極其不美觀,並且無法在其它用到標題信息的地方實現同步。
  
    二、即使為了支持多語言支持把所有的頁面標題都放入資源(或XML)文件中,通過通一的程序代碼來加載標題也會存在一個問題,就是頁面中用到頁面標題的地方可能不僅在標題區如(頁面導航控件),如何讓這些控件也從這些資源文件(或XML)中取得這些標題信息也是一個頭痛的問題。
  
    要達到的目的:
  
    一、在整個網站中的主模板中一次性解決網頁標題的所有問題,所有網站中使用的標題均放在Web.sitemap(可支持多語言)中維護,這樣也可以同時同步維護頁面的導航信息。
  
    二、在彈出窗體的標題中自動為每一個網站標題後面加入站點名稱如(用戶登錄|七思軟件),但在頁面導航控件中引用標題時則不出現這個站點名稱,如(主頁>會員中心>用戶登錄)。
  
    三、當ASPx.cs的程序中引用page.Title屬性時不能有站點名稱如頁面標題欄中顯示的為(用戶登錄|七思軟件),但在頁面的正常程序中引用的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);
  }
  
    解釋:
  
    一、之所以不在(!this.IsPostBack){}塊中實現頁面判斷是因為page.Title中無法保存視圖狀態,我覺得這是.Net2.0中的一個小bug吧。
  
    二、之所以在render方法重寫title屬性是因為在頁面的生存期中,render方法不會保存vIEwstate,而從寫page.Title內容僅在masterpage中有效是因為masterpage負責頁面標題的render,在其後的page的render方法中,title已經render完畢,些時改變title並不會影響render的結果。
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved