在以前的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一樣,就不說了
在原始碼中我寫的功能比這裡說的強一點點,大家可以自己下了看看.