嵌入式代碼塊是在呈現頁面的過程中執行的伺服器代碼。塊中的代碼可以執行編程語句,並調用當前頁類中的函數。
解析運算式
在嵌入式代碼塊中,文法 <% = expression %> 用於解析運算式,並將其值返回到塊中。
嵌入式代碼塊必須使用頁的預設語言進行編寫。例如,如果頁的 @Page 指令包含特性 language="VB",則頁將使用 Visual Basic 編譯器對標有 runat="server" 的所有指令碼塊中的代碼以及 <% %> 分隔字元中的所有內嵌代碼進行編譯。
由於代碼僅在呈現頁的過程中執行,因此與將代碼置於適當的頁處理階段以執行後台代碼或指令碼塊代碼相比,其靈活性大大降低。
解析運算式之資料繫結
資料繫結使用標籤<%# expression %>,將expression的值賦值給控制項。DataBind方法是Control基類的一個方法,所以所有控制項都具有該方法,且控制項的DataBind方法被調用後,控制項內所有子控制項的DataBind方法也會被調用。資料繫結的重要特徵是可以控制日期運算式何時求值。如果Page頁或者繫結控制項的DataBind()方法不被調用,賦值將永遠不會產生。
對比運算式
<% = expression %>解析運算式,不能用於Server端控制項的屬性上,在WEB頁面呈現時被調用,且無法控制賦值時間。
<%# expression %>解析運算式,用於繫結控制項屬性(可以非Server端控制項),在調用控制項的DataBind方法後執行綁定。
對比範例程式碼,第一個<p>段落標籤採用資料繫結,分別針對伺服器端控制項和非伺服器端標籤,如果Page_Load內的DataBind方法注釋掉,那麼第一個<p>標籤內的資料繫結將永遠不會執行。第二個<p>段落標籤內的運算式求值,同樣是調用了伺服器端的自建方法和類庫方法,總是在頁面呈現時調用,且不能控制綁定時間。
其他:
這個樣本在ASP.NET4.0環境測試,去掉了CodeBehind和 Inherits,返璞歸真,對於測試來說,簡潔實用。