1.4 ASP.NET网页语法
1.4.1 ASP.NET网页扩展名
网站应用程序中可以包含很多文件类型。例如,在ASP.NET中经常使用的ASP.NET Web窗体页就是以.aspx为扩展名的文件。ASP.NET网页其他扩展名的具体描述如表1.3所示。
表1.3 ASP.NET网页扩展名
1.4.2 页面指令
ASP.NET页面中的前几行一般是<%@…%>这样的代码,叫作页面的指令,用来定义ASP.NET页分析器和编译器使用的特定于该页的一些定义。在.aspx文件中使用的页面指令一般有以下几种。
1.<%@Page%>
<%@Page%>指令可定义ASP.NET页分析器和编译器使用的属性,一个页面只能有一个这样的指令。
2.<%@Import Namespace="Value"%>
<%@Import Namespace="Value"%>指令可将命名空间导入到ASP.NET应用程序文件中,一个指令只能导入一个命名空间,如果要导入多个命名空间,应使用多个@Import指令来执行。有的命名空间是ASP.NET默认导入的,没有必要再重复导入。
说明
ASP.NET 4.0默认导入的命名空间包括System、System.Configuration、System.Data、System.Linq、System.Web、System.Web.Security、System.Web.UI、System.Web.UI.HtmlControls、System.Web.UI. WebControls、System.Web.UI.WebControls.WebParts、System.Xml.Linq。
3.<%@OutputCache%>
<%@OutputCache%>指令可设置页或页中包含的用户控件的输出缓存策略。
4.<%@Implements Interface="接口名称"%>
<%@Implements Interface="接口名称"%>指令用来定义要在页或用户控件中实现的接口。
5.<%@Register%>
<%@Register%>指令用于创建标记前缀和自定义控件之间的关联关系,有下面3种写法:
<%@ Register tagprefix="tagprefix" namespace="namespace" assembly="assembly" %> <%@ Register tagprefix="tagprefix" namespace="namespace" %> <%@ Register tagprefix="tagprefix" tagname="tagname" src="pathname" %>
tagprefix:提供对包含指令的文件中所使用的标记的命名空间的短引用的别名。
namespace:正在注册的自定义控件的命名空间。
tagname:与类关联的任意别名。此属性只用于用户控件。
src:与tagprefix:tagname对关联的声明性用户控件文件的位置,可以是相对的地址,也可以是绝对的地址。
assembly:与tagprefix属性关联的命名空间的程序集,程序集名称不包括文件扩展名。如果将自定义控件的源代码文件放置在应用程序的App_Code文件夹下,ASP.NET 4.0在运行时会动态编译源文件,因此不必使用assembly属性。
1.4.3 ASPX文件内容注释
服务器端注释(<%--注释内容--%>)允许开发人员在ASP.NET应用程序文件的任何部分(除了<script>代码块内部)嵌入代码注释。服务器端注释元素的开始标记和结束标记之间的任何内容,不管是ASP.NET代码还是文本,都不会在服务器上进行处理或呈现在结果页上。
例如,使用服务器端注释TextBox控件,代码如下:
<%-- <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> --%>
执行后,浏览器上将不显示此文本框。
如果<script>代码块中的代码需要注释,则使用HTML代码中的注释(<! --注释//-->)。此标记用于告知浏览器忽略该标记中的语句。例如:
<script language ="javascript" runat ="server"> <! -- 注释内容 //--> </script>
注意
服务器端注释用于页面的主体,但不在服务器端代码块中使用。当在代码声明块(包含在<script runat="server"></script>标记中的代码)或代码呈现块(包含在<%…%>标记中的代码)中使用特定语言时,应使用用于编码的语言的注释语法。如果在<%…%>块中使用服务器端注释块,则会出现编译错误。开始和结束注释标记可以出现在同一行代码中,也可以由许多被注释掉的行隔开。服务器端注释块不能被嵌套。
1.4.4 服务器端文件包含
服务器端文件包含用于将指定文件的内容插入ASP.NET文件中,这些文件包括网页(.aspx文件)、用户控件文件(.ascx文件)和Global.asax文件。包含文件是在编译之前被包含的文件按原始格式插入到原始位置,相当于两个文件组合为一个文件,两个文件的内容必须符合.aspx文件的要求。
语法如下:
<! -- #include file|virtual="filename" -->
file:文件名是相对于包含带有#include指令的文件目录的物理路径,此路径可以是相对的。
virtual:文件名是网站中虚拟目录的虚拟路径,此路径可以是相对的。
注意
使用file属性时包含的文件可以位于同一目录或子目录中,但该文件不能位于带有#include指令的文件的上级目录中。由于文件的物理路径可能会更改,因此建议采用virtual属性。
<html> <body> <! -- #Include virtual="/include/header.ascx" --> </body> </html>
注意
赋予file或virtual属性的值必须用引号("")括起来。
1.4.5 HTML服务器控件语法
默认情况下,ASP.NET文件中的HTML元素作为文本进行处理,页面开发人员无法在服务器端访问文件中的HTML元素。要使这些元素可以被服务器端访问,必须将HTML元素作为服务器控件进行分析和处理,这可以通过为HTML元素添加runat="server"属性来完成。服务器端通过HTML元素的id属性引用该控件。
语法如下:
<控件名id="名称" …runat="server">
例如,使用HTML服务器端控件创建一个简单的Web应用程序,单击Red按钮将Web页的背景改为红色,程序代码如下:
<%@Page Language="C#" AutoEventWireup="true" CodeFile="HTMLTest.aspx.cs" Inherits="HTMLTest" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>HTML服务器控件</title> <script language="javascript" type="text/javascript" runat="server"> function btnRed_onclick() { form1.style.backgroundColor ="Red"; } </script> </head> <body> <form id="form1" runat="server"> <input id="btnRed" type="button" value="Red" onclick="return btnRed_onclick()" /> </form> </body> </html>
运行结果如图1.48所示。
图1.48 HTML服务器控件举例
注意
HTML服务器控件必须位于具有runat="server"属性的<form>标记中。
1.4.6 ASP.NET服务器控件语法
ASP.NET服务器控件比HTML服务器控件具有更多内置功能。Web服务器控件不仅包括窗体控件(如按钮和文本框),而且还包括特殊用途的控件(如日历、菜单和树视图控件)。Web服务器控件与HTML服务器控件相比更为抽象,因为其对象模型不一定反映HTML语法。
语法如下:
<asp:控件名ID="名称"…组件的其他属性…runat="server" />
例如,使用服务器端控件语法添加控件,程序代码如下:
<html> <head runat="server"> <title>服务器端控件</title> <script language="C#" runat ="server" > //在页面初始化时显示按钮控件的文本 protected void Page_Load(object sender, EventArgs e) { Response.Write(this.btnTest .Text); } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="btnTest" runat="server" Text="服务器按钮控件" /></div> </form> </body> </html>
运行结果如图1.49所示。
图1.49 服务器端控件语法举例
注意
以上代码<script>标记内的language属性必须设置为C#,否则<script>标记内不支持使用C#代码。
1.4.7 代码块语法
代码块语法是定义网页呈现时所执行的内嵌代码。定义内嵌代码的语法标记元素为:
<%内嵌代码%>
例如,使用代码块语法,根据系统时间显示“上午好!”或“下午好!”,具体代码如下:
<html> <head runat="server"> <title>代码块语法</title> </head> <body> <form id="form1" runat="server"> <%if(DateTime.Now.Hour<12) %> 上午好! <%else%> 下午好! </form> </body> </html>
运行结果如图1.50所示。
图1.50 代码块语法举例
说明
以上代码中,DateTime对象用于表示时间上的一刻,通常以日期和当天的时间表示。其包含在System命名空间中。
1.4.8 表达式语法
定义内嵌表达式,使用的语法标记元素为:
<%=内嵌表达式%>
例如,在网页上显示字体大小不同的文本,代码如下:
<html> <head runat="server"> <title>表达式语法</title> </head> <body> <form id="form1" runat="server"> <%for (int i = 1; i < 7; i++) %> <%{%> <font size=<%= i+1%>>Hello World! </font></br> <%}%> </form> </body> </html>
运行结果如图1.51所示。
图1.51 表达式语法举例
说明
以上代码中,使用for循环语句执行6次循环内容。