ASP.NET Web窗體頁面是一個宣告式的文字文件,副檔名是.aspx。除了靜態的內容之外,你還可以使用八種不同的語法標記元素。這一部分回顧這些語法元素並提供了一些使用方法範例。
呈現程式碼的語法:<% %>和<%= %>
程式碼呈現區塊以<% ... %>元素表示,它允許你控制呈現的內容,在Web窗體頁面執行的顯示階段執行。下面的範例示範如何使用它們循環顯示HTML的內容。
<%@ Page Language="VB" %>
<html>
<body>
<% Dim I As Integer
For I = 0 To 7 %>
<font size="<%=I%>"> Hello World! </font> <br>
<% Next %>
</body>
</html>
<% ... %>包含的程式碼只是執行,而包含等號(<%= ... %>)的表達式會在顯示內容的時候計算結果。因此,<%="Hello World" %>與C#程式碼<% Response.Write("Hello World"); %>顯示的結果相同。
請注意,由於語言需要使用標記來終止或分離語句(例如C#中的分號;),因此正確地放置這些標記就很重要了。
C# 代碼
<% Response.Write("Hello World"); %> 需要用分號來終止語句。
<%="Hello World"; %> 錯誤:導致"Response.Write("Hello World";);"。
<%="Hello World" %> 不需要分號。
宣告程式碼的語法:<script runat="server">
程式碼宣告區塊定義了會被編譯到Page類別中的成員變數和方法。這些區塊可用於建立頁面和導航邏輯。下面的範例示範如何在<script runat="server">區塊中定義Subtract方法,接著在頁面中呼叫它。
<html>
<script language="VB" runat=server>
Function Subtract(Num1 As Integer, Num2 As Integer) As Integer
Return Num1-Num2
End Function
</script>
<body>
<%
Dim Number As Integer = 100
Do While Number > 0
Response.Write("Value: " & Number & "<br>")
Number = Subtract(Number, 1)
Loop
%>
</body>
</html>
請注意:與ASP不同-在ASP中函式必須在<% %>區塊定義-所有的函式和全域變數必須使用<script runat=server>標記定義。 <% %>區塊中的函式宣告會提示語法編譯錯誤訊息。
伺服器控制項語法自
訂的ASP.NET伺服器控制項可讓頁面開發者動態地產生HTML使用者介面並回應客戶端請求。它們是在文件中用宣告式的、基於標記的語法表示的。這些標記不同於其它的一些標記,它們包含一個"runat=server"屬性。下面的範例示範如何在ASP.NET頁面中使用<asp:label runat="server">伺服器控制項。這個控制項與System.Web.UI.WebControls名字空間中的Label類別對應。
透過加入ID為「Message」的標記,可以在執行階段建立一個Label實例:
<asp:label id="Message" font-size=24 runat="server"/>
我們可以使用這個名字來存取該控制項。下面的程式碼設定了該控制項的Text屬性。
Message.Text = "Welcome to ASP.NET"
<html>
<script language="VB" runat=server>
Sub Page_Load(Sender As Object, E As EventArgs)
Message.Text = "Welcome to ASP.NET"
End Sub
</script>
<body>
<asp:label id="Message" font-size=24 runat=server/>
</body>
</html>
HTML伺服器控制項語法
HTML伺服器控制項允許開發者程式設計操作頁面中的HTML元素。 HTML伺服器控制項標籤與客戶端HTML元素是有差別的,它帶有"runat=server"屬性。下面的範例示範如何在ASP.NET頁面中使用HTML<span runat=server>伺服器控制項。
<html>
<script language="VB" runat=server>
Sub Page_Load(Sender As Object, E As EventArgs)
Message.InnerHtml = "Welcome to ASP.NET"
End Sub
</script>
<body>
<span id="Message" style="font-size:24" runat=server/>
</body>
</html>
資料綁定語法:<%# %>
ASP.NET內建的支援資料綁定的能力允許頁面開發者分層次地把控制項屬性綁定到資料容器值。 <%# %>程式碼區塊中的程式碼只在自己的父控制項容器的DataBind方法被呼叫的時候才執行。下面的範例示範如何在<asp:datalist runat=server>控制項中使用資料綁定語法。
在這個資料列表中,每個項目都指定了模板。項目範本的內容是使用資料綁定表達式指定的,Container.DataItem指向MyList資料清單使用的資料來源。
<asp:datalist id="MyList" runat=server>
<ItemTemplate>
Here is a value: <%# Container.DataItem %>
</ItemTemplate>
</asp:datalist>
在這種情況下,MyList控制項的資料來源是程式設定的,接著呼叫了DataBind()方法。
呼叫某個控制項的DataBind方法將引發一個遞規樹(從該控制項開始的到樹中的下層控制項);該層次中的每個伺服器控制項的DataBinding事件都會被引發,控制項中的資料綁定表達式相應地計算出值。因此,如果頁面的DataBind方法被調用,那麼頁面中的每個資料綁定表達式都會被調用。
<html>
<script language="VB" runat=server>
Sub Page_Load(Sender As Object, E As EventArgs)
Dim Items As New ArrayList
Items.Add("One")
Items.Add("Two")
Items.Add("Three")
MyList.DataSource = Items
MyList.DataBind()
End Sub
</script>
<body>
<asp:datalist id="MyList" runat=server>
<ItemTemplate>
Here is a value: <%# Container.DataItem %>
</ItemTemplate>
</asp:datalist>
</body>
</html>
ASP.NET 2.0還包含了一種新的簡化的資料綁定語法,它允許控件自動地資料綁定到資料來源控件,而無需在頁面程式碼中呼叫DataBind()。在「執行資料存取」章節中會討論這種語法。
物件標記語法:<object runat="server" />
物件標記允許頁面開發者使用宣告式的、基於標記的語法來宣告並建立變數實例。下面的範例示範如何使用物件標記來建立ArrayList類別的實例。
在運行的時候該物件會自動建立,並且可以透過ID“items”存取它。
<html>
<script language="VB" runat=server>
Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs)
ArrayItems.Add("One")
ArrayItems.Add("Two")
ArrayItems.Add("Three")
MyList.DataSource = ArrayItems
MyList.DataBind()
End Sub
</script>
<body>
<object id="ArrayItems" class="System.Collections.ArrayList" runat=server/>
<asp:datalist id="MyList" runat=server>
<ItemTemplate>
Here is a value: <%# Container.DataItem %>
</ItemTemplate>
</asp:datalist>
</body>
</html>
伺服器端註解語法:<%-- Comment --%>
伺服器端註解讓頁面開發者能夠阻止伺服器程式碼(包含伺服器控制項)與靜態內容的執行與呈現。下面的範例示範如何阻止內容的執行和傳送給客戶端。請注意,<%--和--%>之間的所有資訊都會被過濾掉,並且只有在原始的伺服器檔案中才可以看見,即使它包含了其它的ASP.NET指令。
<html>
<body>
The below content has been hidden from browser clients using a server-side comment
(view the .aspx source to see what we mean :-)
<%--
<asp:calendar id="MyCal" runat=server/>
<% For I = 0 To 44 %>
Hello World <br>
<% Next %>
--%>
</body>
</html>
伺服器端檔案包含語法:<-- #Include File="Locaton.inc" -->
伺服器端檔案包含(#Include)允許開發者在ASP.NET頁面的任何位置插入特定檔案的內容。下面的範例示範如何在一個頁面中插入自訂的標題和腳註。
<html>
<body>
<!-- #Include File="Header.inc" -->
<br />
<h3> Main page content </h3>
<br />
<!-- #Include File="Footer.inc" -->
</body>
</html>
表達式語法:<%$ ... %>2.0中的新特性
ASP.NET 2.0增加了一個新的用於在頁面分析之前進行值替代的宣告式表達式語法。當我們需要用Web.config檔案中的連接字串值或應用程式設定來取代伺服器控制項屬性值的時候,它就非常有用。在本地化(locaization)的時候,它還可以用來取代資源檔案中的值。
<asp:SqlDataSource ID="SqlDataSource1" ConnectionString='<%$ connectionStrings:Pubs %>' runat="server" SelectCommand="sp_GetAuthors" />
<asp:Label ID="Label1" Text='<%$ Resources: ExchRate, ConvertLabel %>' runat="server"/>