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"/>