網頁head區,不能用普通控件,但它有時又很重要,比如title、keywords、description,可能每個頁面都不同,那么怎么樣才能根據內容動態設置它們呢?
方法1:asp能做到的,asp.net當然可以做到,只要你把整個頁面都用response.write()寫出來,沒有什么不能自定義的,當然也可以"<%=某個成員%>"。但很明顯,這樣發揮不了.net的特點。
方法2:利用asp.net的特有屬性:runat="server",給title設置一個id,然后讓它成為服務器變量,那就可以設置其文本了。但這樣出來的html里邊也會帶有id,看著實在不爽。
方法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=/"關鍵字/">";
lt_descri.text = "<meta name=/"description/" content=/"描述/">";
}
這樣就基本達到完美了。
更進一步,我的頁面用了不少用戶控件,并且這些用戶控件有層次,而決定頁面title的,可能是某個用戶控件中的子用戶控件來決定的,而且用戶控件的嵌套層次不固定。 那要怎么來動態設置呢?
首頁,做一個用戶控件的基類,并且給它增加1個public方法:
public void settitle(string title)
{
setliteraltext("lt_title", string.format("<title>{0}</title>", title));
}再增加一個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;
}
}
這樣,你的用戶控件只需要讓它繼承自這個基類,然后在你想設置頁面的title時調用base.settitle("標題"),就簡單的完成了任務。對于head區其它標記,原理和設置title一樣。
新聞熱點
疑難解答
圖片精選