程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> asp.net頁面head區動態設置全攻略

asp.net頁面head區動態設置全攻略

編輯:關於ASP.NET

網頁head區,不能用普通控件,但它有時又很重要,比如title、keywords、description,可能每個頁面都不同,那麼怎麼樣才能根據內容動態設置它們呢?

方法1:asp能做到的,asp.net當然可以做到,只要你把整個頁面都用Response.Write()寫出來,沒有什麼不能自定義的,當然也可以"<%=某個成員%>"。但很明顯,這樣發揮不了.net的特點。

方法2:利用asp.net的特有屬性:runat="server",給title設置一個id,然後讓它成為服務器變量,那就可以設置其文本了。但這樣出來的html裡邊也會帶有id,看著實在不爽。

方法3:利用Literal控件,前台:<HEAD>

<asp:Literal ID="lt_title" Runat="server" />
    <asp:Literal ID="lt_keywords" Runat="server" />
    <asp:Literal ID="lt_descri" Runat="server" />
  </HEAD>

後台:

private void Page_Load(object sender, System.EventArgs e)
{
lt_title.Text = "<title>標題</title>";
lt_keywords.Text = "<meta name=\"keywords\" content=\"關鍵字\">";
lt_descri.Text = "<meta name=\"description\" content=\"描述\">";
}

這樣就基本達到完美了。

更進一步,我的頁面用了不少用戶控件,並且這些用戶控件有層次,而決定頁面title的,可能是某個用戶控件中的子用戶控件來決定的,而且用戶控件的嵌套層次不固定。 那要怎麼來動態設置呢?

首頁,做一個用戶控件的基類,並且給它增加1個public方法:

public void SetTitle(string title)
    {
      SetLiteralText("lt_title", string.Format("<title>{0}</title>", title));
    }再增加一個private方法:
    private void SetLiteralText(string id, string text)
    {
      Literal lt = null;
      Control ctrl = this;
      do
      {
        ctrl = ctrl.Parent;
      }while(ctrl != null && ctrl.GetType().FullName != "System.Web.UI.HtmlControls.HtmlForm" );

      if(ctrl != null)
      {
        lt = ctrl.FindControl(id) as Literal;
        if(lt != null)
          lt.Text = text;
      }
    }

這樣,你的用戶控件只需要讓它繼承自這個基類,然後在你想設置頁面的title時調用base.SetTitle("標題"),就簡單的完成了任務。對於head區其它標記,原理和設置title一樣。

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