LiteralControl ASP.NET中的另類控件
更新時間:2012年01月12日 01:20:46 作者:
對于LiteralControl控件的應用比較少,今天突然看到了,就弄個明白為好,所以總結(jié)出來,供大家一起學習
首先看一個aspx文件里的部分內(nèi)容:
<!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,那么現(xiàn)在要問,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控件,而第一、三、五個則屬于靜態(tài)文本,ASP.NET將其解析成LiteralControl。LiteralControl既不是Web控件,也不是Html控件,自成一類,表示 HTML 元素、文本和 ASP.NET 頁中不需要在服務器上處理的任何其他字符串。幾乎可以說,LiteralControl是ASP.NET中肯定用到的控件,只是你可能不知道而已。
關于LiteralControl,有幾點說明:
1. LiteralControl也可以有ID、ClientID和UniqueID,但一般很少用到。除了用FindControl方法外,給其設置ID沒有什么意義。
2. LitrelControl不具有視圖狀態(tài),雖然它也有一個EnableViewState屬性,但不起作用,回發(fā)后先前更改的狀態(tài)必丟失。
3.由于表示的是靜態(tài)文本,所以無法為LitrelControl本身設置任何樣式。
4. 后臺通過其Text屬性獲取和設置值。
.net LiteralControl詳解
對于LiteralControl控件的應用比較少,今天突然看到了,就弄個明白為好,所以總結(jié)出來,供大家一起學習。
第一,自己做測試
<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將會創(chuàng)建兩個LiteralControl對象,分別代表這個控件之前和之后的靜態(tài)內(nèi)容。兩個服務器控件,相應的就有三個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結(jié)束的地方
</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結(jié)束的地方 122233 5556665
這個例子很明顯的說明,在兩個服務器控件之間的文本控件就是這樣的內(nèi)容。
第二,應用
LiteralControl 類
表示 HTML 元素、文本和 ASP.NET 頁中不需要在服務器上處理的任何其他字符串。
ASP.NET 將所有不需要服務器端處理的 HTML 元素和可讀文本編譯為該類的實例。例如,在開始標記中不包含 runat="server" 屬性/值對的 HTML 元素將被編譯為 LiteralControl 對象。LiteralControl 對象不維護視圖狀態(tài),因此必須針對每個請求重新創(chuàng)建 LiteralControl 對象的內(nèi)容。
文本控件的行為與文本容納器一樣,這意味著可以從文本控件提取文本,并通過父服務器控件的 Controls 屬性從父服務器控件的 ControlCollection 集合中移除文本控件。因此,當開發(fā)從 LiteralControl 類派生的自定義控件時,確保由控件自己執(zhí)行任何所需的預處理步驟,而不是使用對 LiteralControl.Render 方法的調(diào)用來完成這些操作。通常,都會這樣做以提高 Web 應用程序的響應時間。
可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或服務器控件添加或移除文本控件。
代碼:
HtmlTableCell c = new HtmlTableCell();
c.Controls.Add( new LiteralControl("行 " + j.ToString() + ", 列 " + i.ToString()) );
r.Cells.Add(c);
這樣做的目的就是為了提高web應用程序的響應時間,其實質(zhì)跟寫成c.InnerHTML=""是一樣的,不過就是套用了面向?qū)ο蟮乃枷攵选?
復制代碼 代碼如下:
<!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,那么現(xiàn)在要問,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控件,而第一、三、五個則屬于靜態(tài)文本,ASP.NET將其解析成LiteralControl。LiteralControl既不是Web控件,也不是Html控件,自成一類,表示 HTML 元素、文本和 ASP.NET 頁中不需要在服務器上處理的任何其他字符串。幾乎可以說,LiteralControl是ASP.NET中肯定用到的控件,只是你可能不知道而已。
關于LiteralControl,有幾點說明:
1. LiteralControl也可以有ID、ClientID和UniqueID,但一般很少用到。除了用FindControl方法外,給其設置ID沒有什么意義。
2. LitrelControl不具有視圖狀態(tài),雖然它也有一個EnableViewState屬性,但不起作用,回發(fā)后先前更改的狀態(tài)必丟失。
3.由于表示的是靜態(tài)文本,所以無法為LitrelControl本身設置任何樣式。
4. 后臺通過其Text屬性獲取和設置值。
.net LiteralControl詳解
對于LiteralControl控件的應用比較少,今天突然看到了,就弄個明白為好,所以總結(jié)出來,供大家一起學習。
第一,自己做測試
復制代碼 代碼如下:
<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將會創(chuàng)建兩個LiteralControl對象,分別代表這個控件之前和之后的靜態(tài)內(nèi)容。兩個服務器控件,相應的就有三個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結(jié)束的地方
</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結(jié)束的地方 122233 5556665
這個例子很明顯的說明,在兩個服務器控件之間的文本控件就是這樣的內(nèi)容。
第二,應用
LiteralControl 類
表示 HTML 元素、文本和 ASP.NET 頁中不需要在服務器上處理的任何其他字符串。
ASP.NET 將所有不需要服務器端處理的 HTML 元素和可讀文本編譯為該類的實例。例如,在開始標記中不包含 runat="server" 屬性/值對的 HTML 元素將被編譯為 LiteralControl 對象。LiteralControl 對象不維護視圖狀態(tài),因此必須針對每個請求重新創(chuàng)建 LiteralControl 對象的內(nèi)容。
文本控件的行為與文本容納器一樣,這意味著可以從文本控件提取文本,并通過父服務器控件的 Controls 屬性從父服務器控件的 ControlCollection 集合中移除文本控件。因此,當開發(fā)從 LiteralControl 類派生的自定義控件時,確保由控件自己執(zhí)行任何所需的預處理步驟,而不是使用對 LiteralControl.Render 方法的調(diào)用來完成這些操作。通常,都會這樣做以提高 Web 應用程序的響應時間。
可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或服務器控件添加或移除文本控件。
代碼:
復制代碼 代碼如下:
HtmlTableCell c = new HtmlTableCell();
c.Controls.Add( new LiteralControl("行 " + j.ToString() + ", 列 " + i.ToString()) );
r.Cells.Add(c);
這樣做的目的就是為了提高web應用程序的響應時間,其實質(zhì)跟寫成c.InnerHTML=""是一樣的,不過就是套用了面向?qū)ο蟮乃枷攵选?
相關文章
asp.net 日期函數(shù) 某月的第一天和最后一天的日期
常用asp.net日期操作函數(shù)-得到某月的第一天和最后一天的日期2008-12-12
實現(xiàn)Asp與Asp.Net共享Session的方法
這篇文章主要介紹了實現(xiàn)Asp與Asp.Net共享Session的方法,需要的朋友可以參考下2014-08-08
httpHandler實現(xiàn).Net無后綴名Web訪問的實現(xiàn)解析
有時候我們看到很多網(wǎng)站是網(wǎng)址是沒有后綴名的,其實.net中可以通過httpHandler來實現(xiàn)。2011-10-10
ASP.NET MVC3的偽靜態(tài)實現(xiàn)代碼
最近使用asp.net MVC3開發(fā)B2C電子商務系統(tǒng),為了SEO的優(yōu)化工作,需要通過路由實現(xiàn)偽靜態(tài)URL,后續(xù)再根據(jù)需要生成真正的靜態(tài)頁面,不直接走路由訪問具體的頁面2011-12-12
IIS中ASP.NET連接SQL Server出錯的解決方法
在IIS中運行的ASP.NET應用程序其所屬用戶名為ASPNET的特定用戶,其默認權(quán)限是無法訪問SQL Server的,更不可能訪問ASP.NET應用程序的數(shù)據(jù)庫了,因此要在IIS中訪問SQL Server就需要給ASPNET帳戶賦予相應的權(quán)限.2010-03-03
Asp.Net 網(wǎng)站優(yōu)化系列之數(shù)據(jù)庫優(yōu)化措施 使用主從庫(全)
網(wǎng)站規(guī)模到了一定程度之后,該分的也分了,該優(yōu)化的也做了優(yōu)化,但是還是不能滿足業(yè)務上對性能的要求;這時候我們可以考慮使用主從庫。2010-06-06

