LiteralControl ASP.NET中的另類控制項

來源:互聯網
上載者:User

首先看一個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對象。再看個例子 複製代碼 代碼如下:<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server" id="head1">
<title >無標題頁</title>
</head>
<body id="body1">
bogy343242
<form id="form1" runat="server">
<div id="div1">
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
<div id="div2">
</div>
</asp:Panel>
</div>
</form>
這應該是form結束的地方
</body>
122233
</html>

顯示外層的控制項類型及其ID(LiteralControl顯示其中的HTML文本)如下:
System.Web.UI.LiteralControl-
***text: 1231232321 html23232
System.Web.UI.HtmlControls.HtmlHead-head1
System.Web.UI.LiteralControl-
***text: /headerefefe bogy343242
System.Web.UI.HtmlControls.HtmlForm-form1
System.Web.UI.LiteralControl-
***text: 這應該是form結束的地方 122233 5556665
這個例子很明顯的說明,在兩個伺服器控制項之間的文本控制項就是這樣的內容。
第二,應用
LiteralControl 類
表示 HTML 元素、文本和 ASP.NET 頁中不需要在伺服器上處理的任何其他字串。
ASP.NET 將所有不需要伺服器端處理的 HTML 元素和可讀文本編譯為該類的執行個體。例如,在開始標記中不包含 runat="server" 屬性/值對的 HTML 元素將被編譯為 LiteralControl 對象。LiteralControl 對象不維護檢視狀態,因此必須針對每個請求重新建立 LiteralControl 對象的內容。
文本控制項的行為與文本容納器一樣,這意味著可以從文本控制項提取文本,並通過父伺服器控制項的 Controls 屬性從父伺服器控制項的 ControlCollection 集合中移除文本控制項。因此,當開發從 LiteralControl 類派生的自訂控制項時,確保由控制項自己執行任何所需的預先處理步驟,而不是使用對 LiteralControl.Render 方法的調用來完成這些操作。通常,都會這樣做以提高 Web 應用程式的回應時間。
可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或伺服器控制項添加或移除文本控制項。
代碼: 複製代碼 代碼如下:HtmlTableCell c = new HtmlTableCell();
c.Controls.Add( new LiteralControl("行 " + j.ToString() + ", 列 " + i.ToString()) );
r.Cells.Add(c);

這樣做的目的就是為了提高web應用程式的回應時間,其實質跟寫成c.InnerHTML=""是一樣的,不過就是套用了物件導向的思想而已。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.