在以前的asp程序里我們經(jīng)常用使用response.write動(dòng)態(tài)輸出網(wǎng)頁header信息,但在asp.net里這個(gè)所謂代碼與ui分離的指導(dǎo)思想不再希望我們這樣做了(當(dāng)然如果您愿意還可以,這畢竟只是建議而已),以前見過別人用<title ranut="server" id="titlecontrol">default title</title>設(shè)置標(biāo)題的,但本人認(rèn)為不是很好,因?yàn)檫@會(huì)產(chǎn)生多余的id="titlecontrol" 個(gè)人感覺使用literal控件控制比較好,因?yàn)樗粫?huì)產(chǎn)生一個(gè)多余的字符:),也有人使用js的動(dòng)態(tài)設(shè)置標(biāo)題,但這你讓搜索引擎怎么辦?
動(dòng)態(tài)控制page頁的head信息其實(shí)很簡單
先看演示: http://www.lvjiyong.com/demo/aspnet/setheader/
演示做的很簡單,大家可以下了源碼好好看,注解里面都有了
主要使用了literal與placeholder
方法放置在basepage里,下次讓webform繼承basepage類就可以調(diào)用了
使用literal設(shè)置title信息
使用placeholder載入樣式表與腳本
literal允許我們直接設(shè)置文本信息,使用時(shí)我們先讓程序查找是否有指定的literal控件,如果有則設(shè)置text
/**//// <summary>
/// 設(shè)置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區(qū)設(shè)置了<asp:literal id="pagetitle" runat="server" />,我們可以這樣設(shè)置標(biāo)題
這里先準(zhǔn)備一個(gè)方法
/**//// <summary>
/// 設(shè)置網(wǎng)頁標(biāo)題
/// </summary>
/// <param name="_title">網(wǎng)頁標(biāo)題</param>
protected void settitle(string _title)
{
setheader("pagetitle","<title>" + _title + "</title>");
在webfrom中我們就可以這樣設(shè)置標(biāo)題了
this.settitle("呂的部落格");
description,keywords等的方法一樣,不過要設(shè)置meta,這個(gè)就不講了,可以看源碼
下面我再說一下js與css的載入,這次我們用到的是placeholder控件,為什么用這個(gè)不沿用literal,自己想想
placeholder一般只占用位置,方便我們動(dòng)態(tài)加載控件,這樣載入js與css就方便多了
首先了也是查找指定的placeholder控件
/**//// <summary>
/// 查找loadheader的placeholder容器
/// </summary>
/// <returns></returns>
private control findheader()
{
return this.findcontrol("loadheader");
}再是動(dòng)態(tài)加入控件
/**//// <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創(chuàng)建子控件然后加到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一樣,就不說了
在源碼中我寫的功能比這里說的強(qiáng)一點(diǎn)點(diǎn),大家可以自己下了看看.
新聞熱點(diǎn)
疑難解答
圖片精選