软件开发视频大讲堂:ASP.NET从入门到精通(第4版)
上QQ阅读APP看书,第一时间看更新

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次循环内容。