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" />
对象标记允许页面开发者使用宣告式的、基于标记的语法来声明和建立变量实例。下面