網(wǎng)頁(yè)head區,不能用普通控件,但它有時(shí)又很重要,比如title、keywords、description,可能每個(gè)頁(yè)面都不同,那么怎么樣才能根據內容動(dòng)態(tài)設置它們呢?
方法1:asp能做到的,asp.net當然可以做到,只要你把整個(gè)頁(yè)面都用Response.Write()寫(xiě)出來(lái),沒(méi)有什么不能自定義的,當然也可以"<%=某個(gè)成員%>"。但很明顯,這樣發(fā)揮不了.net的特點(diǎn)。
方法2:利用asp.net的特有屬性:runat="server",給title設置一個(gè)id,然后讓它成為服務(wù)器變量,那就可以設置其文本了。但這樣出來(lái)的html里邊也會(huì )帶有id,看著(zhù)實(shí)在不爽。
方法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=\"關(guān)鍵字\">";
lt_descri.Text = "<meta name=\"description\" content=\"描述\">";
}
這樣就基本達到完美了。
更進(jìn)一步,我的頁(yè)面用了不少用戶(hù)控件,并且這些用戶(hù)控件有層次,而決定頁(yè)面title的,可能是某個(gè)用戶(hù)控件中的子用戶(hù)控件來(lái)決定的,而且用戶(hù)控件的嵌套層次不固定。 那要怎么來(lái)動(dòng)態(tài)設置呢?
首頁(yè),做一個(gè)用戶(hù)控件的基類(lèi),并且給它增加1個(gè)public方法:
public void SetTitle(string title)
{
SetLiteralText("lt_title", string.Format("<title>{0}</title>", title));
}再增加一個(gè)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;
}
}
這樣,你的用戶(hù)控件只需要讓它繼承自這個(gè)基類(lèi),然后在你想設置頁(yè)面的title時(shí)調用base.SetTitle("標題"),就簡(jiǎn)單的完成了任務(wù)。對于head區其它標記,原理和設置title一樣。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。