網頁head區,不能用普通控件,但它有時又很重要,例如title、keywords、description,可能每個頁面都不同,那麼怎麼樣才能根據內容動態設定它們呢?
方法1:asp能做到的,asp.net當然可以做到,只要你把整個頁面都用Response.Write()寫出來,沒有什麼不能自訂的,當然也可以"<%=某個成員% >"。但很明顯,這樣發揮不了.net的特色。
方法2:利用asp.net的特有屬性:runat="server",給title設定一個id,然後讓它成為伺服器變量,那就可以設定其文字了。但這樣出來的html裡邊也會帶有id,看起來不爽。
方法3:利用Literal控件,前台:
更進一步,我的頁面用了不少用戶控件,並且這些用戶控件有層次,而決定頁面title的,可能是某個用戶控件中的子用戶控件來決定的,而且用戶控件的嵌套層次不固定。 那怎麼來動態設定呢?
首頁,做一個使用者控制項的基類,並且給它增加1個public方法:
public void SetTitle(string title)
{
SetLiteralText("lt_title", string.Format("
if(ctrl != null)
{
lt = ctrl.FindControl(id) as Literal;
if(lt != null)
lt.Text = text;
}
}
這樣,你的使用者控制項只需要讓它繼承自這個基類,然後在你想設定頁面的title時呼叫base.SetTitle("標題"),就簡單的完成了任務。對於head區其它標記,原理和設定title一樣。