〈%# 〉與〈%= 〉的區別,顯示資料與繫結資料
有很長時間沒來 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>”。也就是說,<%= %> 應早於 <%#%>,先被“翻譯”出來……
相關文章
- ASPxGridView的資料繫結顯示View
- DataGridView的資料繫結 與 指定列顯示 (程式碼完成)View
- 微信小程式資料資料繫結顯示NaN微信小程式NaN
- 大資料與海量資料的區別大資料
- “大資料”與“海量資料”的區別大資料
- 前端三大框架:資料繫結與資料流前端框架
- 如何能保證頁面顯示的資料與資料庫的資料同步資料庫
- 資料倉儲與ODS的區別
- 小程式與Vue對比·資料繫結Vue
- 資料資產管理與資料治理什麼區別?
- vue select 繫結複雜資料和預設顯示Vue
- Windows 應用程式 DataGrid資料繫結顯示中文列名Windows
- 資料探勘與資料分析的主要區別是什麼
- 資料庫與資料倉儲的區別是什麼資料庫
- 資料倉儲、資料湖與湖倉一體的區別與聯絡
- 統計學與資料探勘的區別
- Blazor WebAssembly 修仙之途 - 元件與資料繫結BlazorWeb元件
- 給定json資料,將資料與頁面結構進行繫結JSON
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- 大資料與深度學習區別大資料深度學習
- 資料繫結
- Redis基礎(一)資料結構與資料型別Redis資料結構資料型別
- 簡單資料繫結和複雜資料繫結
- 資料網格與Data Fabric的區別 - thenewstack
- 資料庫中where與having的區別資料庫
- MapReduce 與 關係型資料庫的區別資料庫
- 關於Oracle資料庫與MySQL資料庫的幾點區別Oracle資料庫MySql
- angular學習筆記<一>:模板與資料繫結Angular筆記
- Object.defineProperty與雙向繫結、資料監聽Object
- C/C++ Qt 資料庫與TreeView元件繫結C++QT資料庫View元件
- DataGrid與SQL Server 2000資料繫結SQLServer
- Vue的資料繫結Vue
- 大資料分析與機器學習之間的區別與聯絡大資料機器學習
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- 資料繫結原理
- 快速理解D3js 資料繫結之 enter 與 exit 與 updateJS
- Android JetPack~ DataBinding(資料繫結)(一) 整合與使用AndroidJetpack
- oracle資料型別與儲存結構Oracle資料型別