LiteralControl ASP.NET中的另類控件
2024-07-10 12:41:30
供稿:網友
首先看一個aspx文件里的部分內容:
代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
</html>
我們知道ASP.NET會把這個文檔解析成類似Dom的控件樹,控件樹是分層、遞歸的。其中最頂層的是頁面Page,那么現在要問,Page的下一層有多少個控件?
答案是5個,可以輸出this.Page.Controls.Count的值驗證一下。它是怎么解析的呢?
第一個:從<!DOCTYPE到transitional.dtd">/r/n
第二個:從<head id="Head1"到</head>,類型為HtmlHead;
第三個:包括</head>后面的/r/n/<body>/r/n/t
第四個:從<form id=到</form>,類型為HtmlForm;
第五個:從</form>后面的/r/n到最后。
其中第二個和第四個屬于Html控件,而第一、三、五個則屬于靜態文本,ASP.NET將其解析成LiteralControl。LiteralControl既不是Web控件,也不是Html控件,自成一類,表示 HTML 元素、文本和 ASP.NET 頁中不需要在服務器上處理的任何其他字符串。幾乎可以說,LiteralControl是ASP.NET中肯定用到的控件,只是你可能不知道而已。
關于LiteralControl,有幾點說明:
1. LiteralControl也可以有ID、ClientID和UniqueID,但一般很少用到。除了用FindControl方法外,給其設置ID沒有什么意義。
2. LitrelControl不具有視圖狀態,雖然它也有一個EnableViewState屬性,但不起作用,回發后先前更改的狀態必丟失。
3.由于表示的是靜態文本,所以無法為LitrelControl本身設置任何樣式。
4. 后臺通過其Text屬性獲取和設置值。
.net LiteralControl詳解
對于LiteralControl控件的應用比較少,今天突然看到了,就弄個明白為好,所以總結出來,供大家一起學習。
第一,自己做測試
代碼如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server" id="head1">
<title >無標題頁</title>
</head>
<body id="body1">
<form id="form1" runat="server">
<div id="div1">
<div id="div2">
</div>
</asp:Panel>
</div>
</form>
</body>
</html>
以上代碼在讀取最外層控件所有類型時:
System.Web.UI.LiteralControl-
System.Web.UI.HtmlControls.HtmlHead-head1
System.Web.UI.LiteralControl-
System.Web.UI.HtmlControls.HtmlForm-form1
System.Web.UI.LiteralControl-
可以看到有五個控件,其中兩個服務器控件head和form。但是別的三個又是什么呢?
其實很簡單:舉個例子,如果頁面上有一個服務器控件,ASP.net將會創建兩個LiteralControl對象,分別代表這個控件之前和之后的靜態內容。兩個服務器控件,相應的就有三個LiteralControl對象。再看個例子