動態控制Page頁的Head資訊

來源:互聯網
上載者:User
動態|控制

在以前的ASP程式裡我們經常用使用Response.Write動態輸出網頁Header資訊,但在ASP.NET裡這個所謂代碼與UI分離的指導思想不再希望我們這樣做了(當然如果您願意還可以,這畢竟只是建議而已),以前見過別人用<title ranut="server" id="titleControl">Default Title</title>設定標題的,但本人認為不是很好,因為這會產生多餘的id="titleControl" 個人感覺使用Literal控制項控制比較好,因為它不會產生一個多餘的字元:),也有人使用js的動態設定標題,但這你讓搜尋引擎怎麼辦?

動態控制Page頁的Head資訊其實很簡單
先看示範: http://www.lvjiyong.com/demo/aspnet/setheader/
示範做的很簡單,大家可以下了源碼好好看,註解裡面都有了

主要使用了Literal與PlaceHolder
方法放置在BasePage裡,下次讓WebForm繼承BasePage類就可以調用了
使用Literal設定Title資訊
使用PlaceHolder載入樣式表與指令碼
Literal允許我們直接設定文本資訊,使用時我們先讓程式尋找是否有指定的Literal控制項,如果有則設定Text


        /**//// <summary>
        /// 設定Head資訊
        /// </summary>
        /// <param name="_name">控制項</param>
        /// <param name="_control">文本</param>
        private void setHeader(string _control,string _text)
        {
            Literal obj = this.FindControl(_control) as Literal;
            if(obj != null)
            {
                obj.Text = _text;
            }
        }
比如我們在Head區設定了<asp:Literal id="PageTitle" runat="server" />,我們可以這樣設定標題
這裡先準備一個方法
  /**//// <summary>
  /// 設定網頁標題
  /// </summary>
  /// <param name="_title">網頁標題</param>
  protected void SetTitle(string _title)
  {
   setHeader("PageTitle","<title>" + _title + "</title>");
  在WebFrom中我們就可以這樣設定標題了
this.SetTitle("呂的部落格");
Description,Keywords等的方法一樣,不過要設定Meta,這個就不講了,可以看源碼

下面我再說一下js與css的載入,這次我們用到的是PlaceHolder控制項,為什麼用這個不沿用Literal,自己想想
PlaceHolder一般只佔用位置,方便我們動態載入控制項,這樣載入js與css就方便多了
首先了也是尋找指定的PlaceHolder控制項
        /**//// <summary>
        /// 尋找LoadHeader的PlaceHolder容器
        /// </summary>
        /// <returns></returns>
        private Control findHeader()
        {
            return this.FindControl("LoadHeader");
        }再是動態加入控制項
        /**//// <summary>
        /// 裝載控制項到PlaceHolder控制項
        /// </summary>
        /// <param name="_obj"></param>
        protected void LoadPlaceHolder(HtmlGenericControl _obj)
        {
            objHeader = findHeader() as Control;

            //載入指令檔
            if(objHeader != null)
            {
                objHeader.Controls.Add(_obj);

            }
        }要載入CSS或JS我們先用HtmlGenericControl建立子控制項然後加到PlaceHolder控制項中
        /**//// <summary>
        /// 載入指定的樣式表檔案
        /// </summary>
        /// <param name="_cssPath">樣式表檔案地址</param>
        protected void LoadCss(string _cssPath)
        {


            HtmlGenericControl objCss = new HtmlGenericControl("link");
            objCss.Attributes["rel"] = "stylesheet";
            objCss.Attributes["type"] = "text/css";
            objCss.Attributes["href"] =  _cssPath;
            objCss.Attributes["media"] =  "screen";
            this.LoadPlaceHolder(objCss);


        }
那我們在WebForm中要載入樣式表只要使用
this.LoadCss("樣式表地址");載入js一樣,就不說了

在源碼中我寫的功能比這裡說的強一點點,大家可以自己下了看看.



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。