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