〈%# 〉與〈%= 〉的區別,顯示資料與繫結資料
有很長時間沒來 CSDN 的部落格了。今天在社群裡看到一個網友提問關於 asp.net 中“<%# %>” 的問題,所以還是想把這篇文章發到自己的部落格上。雖然不是非常很高深的問題,但是還是應該多加留意……
aspx頁面中,<%= %> 與 <%# %> 的區別
關於這個問題,在多數的 ASP.NET 的教材中,都提到了一些。<%= %>與<%# %>的區別在於:繫結時機不同,<%# %>是在控制元件呼叫DataBind函式的時候才被確定。對於<%= %>,我想你應該不會陌生,在ASP時代,它就相當於 Response.Write。在ASP.NET時代也一樣。暫時先不去理會教材中說的,也先把“繫結時機”放到一邊。<%= %>與<%# %>的區別是:前者是輸出,而後者是賦值!即:
<%= "A" %> 相當於:Response.Write("A");
<%# "A" %> 相當於:變數="A";
先來看一個例子:
<html>
<body>
<asp:Button Text=<%# "Hello, the Internet!" %> RunAt="Server" ID="testButton" />
</body>
</html>
這句話相當於賦值,把上面這個勾黑句子翻譯成後臺程式碼就是:testButton.Text="Hello, the Internet!";
第二個例子:
<html>
<body>
<%= "Hello, the Internet!" %>
<%# "Hello, the Internet!" %>
</body>
</html>
<%= "Hello, the Internet!" %> 就相當於:Response.Write("Hello, the Internet!");
那麼第二個<%# %>怎麼解釋呢?如果按照我“賦值”的說法,它把值賦給誰了呢?
其實翻譯成後臺程式碼是這樣的:(new System.Web.UI.LiteralControl()).Text="Hello, the Internet!";
一段文字,雖然它不被包含在任何開始結束標籤之間,但是[font='Courier]ASP.NET[/font]也認為它是一個控制元件。一個[font='Courier]LiteralControl[/font]控制元件。所以,[font='Courier]<%# %>[/font]就是把值賦給[font='Courier]LiteralControl[/font]控制元件的Text屬性。
我做過一個生成靜態 HTML 程式碼的類,使用的手法是包裝了 HtmlTextWriter這個類。並且我做了跟蹤除錯。跟蹤的結果令我感到很意外。ASP.NET 會把所有的未標有“runat=server”屬性的標記,統統看作是一個LiteralControl 控制元件。例如在上面那些 HTML 程式碼裡,例如在文章開始處的那些 HTML 程式碼裡,ASP.NET會認為是有三個伺服器控制元件,分別是:LiteralControl、Button、LiteralCtontrol。第一個LiteralControl 的 Text 值為“<html><body>Hello, theInternet!”,而最後一個 LiteralControl 的 Text值是“</body></html>”。也就是說,<%= %> 應早於 <%#%>,先被“翻譯”出來……
aspx頁面中,<%= %> 與 <%# %> 的區別
關於這個問題,在多數的 ASP.NET 的教材中,都提到了一些。<%= %>與<%# %>的區別在於:繫結時機不同,<%# %>是在控制元件呼叫DataBind函式的時候才被確定。對於<%= %>,我想你應該不會陌生,在ASP時代,它就相當於 Response.Write。在ASP.NET時代也一樣。暫時先不去理會教材中說的,也先把“繫結時機”放到一邊。<%= %>與<%# %>的區別是:前者是輸出,而後者是賦值!即:
<%= "A" %> 相當於:Response.Write("A");
<%# "A" %> 相當於:變數="A";
先來看一個例子:
<html>
<body>
<asp:Button Text=<%# "Hello, the Internet!" %> RunAt="Server" ID="testButton" />
</body>
</html>
這句話相當於賦值,把上面這個勾黑句子翻譯成後臺程式碼就是:testButton.Text="Hello, the Internet!";
第二個例子:
<html>
<body>
<%= "Hello, the Internet!" %>
<%# "Hello, the Internet!" %>
</body>
</html>
<%= "Hello, the Internet!" %> 就相當於:Response.Write("Hello, the Internet!");
那麼第二個<%# %>怎麼解釋呢?如果按照我“賦值”的說法,它把值賦給誰了呢?
其實翻譯成後臺程式碼是這樣的:(new System.Web.UI.LiteralControl()).Text="Hello, the Internet!";
一段文字,雖然它不被包含在任何開始結束標籤之間,但是[font='Courier]ASP.NET[/font]也認為它是一個控制元件。一個[font='Courier]LiteralControl[/font]控制元件。所以,[font='Courier]<%# %>[/font]就是把值賦給[font='Courier]LiteralControl[/font]控制元件的Text屬性。
我做過一個生成靜態 HTML 程式碼的類,使用的手法是包裝了 HtmlTextWriter這個類。並且我做了跟蹤除錯。跟蹤的結果令我感到很意外。ASP.NET 會把所有的未標有“runat=server”屬性的標記,統統看作是一個LiteralControl 控制元件。例如在上面那些 HTML 程式碼裡,例如在文章開始處的那些 HTML 程式碼裡,ASP.NET會認為是有三個伺服器控制元件,分別是:LiteralControl、Button、LiteralCtontrol。第一個LiteralControl 的 Text 值為“<html><body>Hello, theInternet!”,而最後一個 LiteralControl 的 Text值是“</body></html>”。也就是說,<%= %> 應早於 <%#%>,先被“翻譯”出來……
相關文章
- 微信小程式資料資料繫結顯示NaN微信小程式NaN
- 前端三大框架:資料繫結與資料流前端框架
- 資料倉儲與大資料的區別大資料
- vue select 繫結複雜資料和預設顯示Vue
- 小程式與Vue對比·資料繫結Vue
- 資料資產管理與資料治理什麼區別?
- 給定json資料,將資料與頁面結構進行繫結JSON
- 資料探勘與資料分析的主要區別是什麼
- 資料倉儲、資料湖與湖倉一體的區別與聯絡
- Android JetPack~ DataBinding(資料繫結)(一) 整合與使用AndroidJetpack
- Blazor WebAssembly 修仙之途 - 元件與資料繫結BlazorWeb元件
- 資料庫中where與having的區別資料庫
- 資料繫結
- Redis基礎(一)資料結構與資料型別Redis資料結構資料型別
- C/C++ Qt 資料庫與TreeView元件繫結C++QT資料庫View元件
- angular學習筆記<一>:模板與資料繫結Angular筆記
- Object.defineProperty與雙向繫結、資料監聽Object
- 資料網格與Data Fabric的區別 - thenewstack
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡哪個更好
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- 快速理解D3js 資料繫結之 enter 與 exit 與 updateJS
- 可變資料型別(mutable)與不可變資料型別(immutable)總結資料型別
- 在資料庫的查詢與更新中,CHARINDEX與instr的區別?資料庫Index
- Java中的基本資料型別與引用資料型別Java資料型別
- 【clickhouse專欄】資料庫、資料倉儲之間的區別與聯絡資料庫
- DAMA認證|一文淺析資料治理與資料管理的區別
- 獨立顯示卡與整合顯示卡的區別 獨立顯示卡與整合顯示卡優缺點介紹
- Angular | 理解資料繫結Angular
- Binding(一):資料繫結
- SpringMVC資料繫結demoSpringMVC
- 資料化與資訊化的邏輯,有本質的區別
- GridView繫結資料與隱藏指定控制元件(模板列)View控制元件
- 資料結構與排序資料結構排序
- 第二講、Vue3.x繫結資料、繫結html、繫結屬性、迴圈資料VueHTML
- 介面、資料結構、資訊架構的區別資料結構架構
- 原生分散式資料庫與子資料庫子表中介軟體的區別分散式資料庫
- Mysql資料庫使用from與join兩表查詢的方法區別總結MySql資料庫
- 結構化資料與非結構化資料的差異
- 資料結構與演算法-資料結構(棧)資料結構演算法