ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

已创建的 ASP.NET Web 页面类似于静态 HTML Web 页面(即不包括基于服务器端处理的页面),但是它们包括了被 ASP.NET 所认可的额外元素,并且在页面运行的时候进行处理。ASP.NET Web 页面区别于静态 HTML(或者其他)页面的特征如下:

  • 把 .htm,.html 的文件扩展名换成 .aspx。拥有 .aspx 文件扩展名的页面文件会被 ASP.NET 进行处理。

    提示:ASP.NET 的文件名扩展映射是在 Internet Information Services(IIS)中被完成的。默认时,.aspx 页面是由 ASP.NET 运行的,而 .htm 和 .html 页面则不是。

  • 一个可选的 @ Page 指令或者其他与你所创建的页面类型相匹配的其他指令。

  • 一个正确地为 ASP.NET 所配置的 form 元素。这个 form 元素是唯一在你需要在页面处理期间使用页面控件时所必需的。

  • Web 服务器端控件。

  • 服务器端代码,如果你在页面中添加了代码的话。

    提示:如果你想要让你的页面与 XHTML 标准相匹配的话,那么你就必须包含额外的元素,比如 DOCTYPE 元素。详细内容请参考[ASP.NET 与 XHTML]。

以下部分分别为这些元素提供了更多的细节。

你可以把任何 HTML 页面的名称都改成 .aspx 文件名扩展并且会被当成 ASP.NET Web 页面来运行。但是,如果页面没有包括服务器端处理,那么你就不需要再添加 .aspx 文件扩展名,因为这样做会增加页面的处理时间。

ASP.NET Web 页面范例

以下代码示范了一个页面,该页面包含了一些用来组成 ASP.NET Web 页面的基本元素。该页面包含了你想要在 HTML 页面中所使用的静态文字,并且与特定的 ASP.NET 元素一起被使用。代码中的 ASP.NET 专用的元素被高亮显示。

提示:为了更加清楚,这个范例页面并没有遵循 XHTML 标准。详细内容请参考[ASP.NET 与 XHTML]。

安全提示:这个范例页面包含一个文本输入框用来接收用户输入,然而这是一个潜在的安全威胁。默认时,ASP.NET Web 页面会验证用户输入中是否包含脚本与 HTML 元素。更多信息请参考[脚本开发概览]。

<%@ Page Language="C#" %>
<html>
<script runat="server">
    void Button1_Click(Object sender, EventArgs e)
        Label1.Text = "欢迎," + TextBox1.Text;
    End Sub
</script>
<head runat="server">
  <title>基本的 ASP.NET Web 页面</title>
</head>
<body>
  <form id="form1" runat="server">
    <h1>欢迎使用 ASP.NET</h1>
    <p>输入你的名字然后点击按钮。</p>
    <p>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      <asp:Button ID="Button1" runat="server" 
        Text="Click" OnClick="Button1_Click" />
    </p>
    <p>
      <asp:Label ID="Label1" runat="server"></asp:Label>
    </p>
  </form>
</body>

@ 指令

ASP.NET 页面通常会包含一些指令以允许你为页面指定页面属性和配置信息。这些指令被用来指示 ASP.NET 如何对页面进行处理,但是它们并不会被呈现成标记的一部分也不会被发送到浏览器。

最常被使用的指令就是 @ Page,它允许你为页面指定许多配置选项,其中包括:

  • 页面代码中的服务器端编程语言。

  • 页面既可以直接包含服务器端代码(被称为单文件页面),也可以把代码保存在单独的类文件中(被称为幕后代码页面)。前面范例中的页面就是一个单文件页面;代码是直接编写在页面中的,并且 @ Page 指令也没有包含关于类文件的链接。更多信息请参考[ASP.NET Web 页面的代码模型]。

  • 调试与追踪选项。

  • 如果页面拥有一个相关联的控制页,那么它就应该被视为一个内容页面。

如果你没有在页面中包含一个 @ Page 指令,或者如果该指令没有包含特定的设置,那么这些设置就会从 Web 应用程序的配置文件(Web.config 文件)或者从站点配置文件(Machine.config 文件)中得到继承。

除了包含 @ Page 指令之外,你也可以包含支持额外的页面选项的其他指令。这些公共指令如下:

  • @ Import

    这个指令允许你指定需要引用到代码中的命名空间。

  • @ OutputCache

    这个指令允许你指定页面是否被缓存,连同指定缓存开始时间与缓存期限的参数一起来对页面进行缓存。

  • @ Implements

    这个指令允许你指定页面所实现的 .NET 接口。

  • @ Register

    这个指令允许你注册在页面中所使用的额外控件。@ Register 指令声明了该控件的前缀标记以及控件汇编集的位置。如果你要把用户控件或者自定义的 ASP.NET 控件添加到页面中,那么你就必须使用这个指令。

有些特定类型的 ASP.NET 文件需要使用到除 @ Page 之外的其他指令。例如,ASP.NET 控制页就会使用一个 @ Master 指令,而 ASP.NET 用户控件则会使用一个 @ Control 指令。每种指令都允许你为适当的文件指定不同的选项。

详细信息请参考[ASP.NET Master Page 概览和 ASP.NET 用户控件]。

窗体元素

如果你的页面包含了允许用户进行交互并且可被提交的控件,那么这个页面就必须包含一个 form 元素。你可以使用 HTML 的 form 元素,但是必须应用特定的规则。使用 form 元素的规则如下:

  • 页面只能够包含唯一一个 form 元素。

  • 这个 form 元素必须包含值被设置成 server 的 runat 特性。这个特性允许你提交窗体和能够在服务器代码中进行编程的页面控件。

  • 可以完成回传的服务器控件必须被包含在 form 元素中。

  • 开始标记中不能够包含有 action 特性。因为 ASP.NET 会在页面被处理的时候动态设置这些特性,并且覆盖所有可能的设置。

Web 服务器端控件

在多数 ASP.NET 页面中,你需要添加控件以允许用户与页面进行交互,包括按钮、文本输入框,列表等等。这些 Web 服务器控件与 HTML 按钮与输入元素是类似的。无论如何,它们都是在服务器端被处理的,并且允许你使用服务器端代码来设置它们的属性。这些控件同样可以触发能够在服务器端代码中被处理的多种事件。

服务器端控件使用的是一种特别的语法,并且这种语法在页面运行的时候是被 ASP.NET 所认可的。下列代码范例就说明了一些典型的 Web 服务器端控件。

安全提示:文本输入框会接收用户输入,然而这是一个潜在的安全威胁。默认时,ASP.NET Web 页面会验证用户输入是否包含脚本与 HTML 元素。更多信息请参考[脚本开发概览]。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" 
    Text="Click" OnClick="Button1_Click" />

ASP.NET 服务器端控件的标记名称由一个前缀开始,在这里是 asp:。如果控件不是 .NET Framework 的一部分的话,这个前缀也许会有所不同。ASP.NET 服务器端控件同样包含 runat="server" 特性以及一个可选的 ID 特性,你可以在服务器端代码中用来对控件进行引用。

页面一旦运行,它就会服务器端控件进行识别并且运行与这些控件相关联的代码。大多数控件都会把 HTML 或者其他标记呈现到页面中。例如,asp:textbox 控件会把一个拥有 type="text" 特性的 input 元素呈现在页面中。然而,这些映射并不需要在 Web 服务器控件与 HTML 元素之间进行一一对应。例如,asp:calendar 控件就会呈现一个 HTML 表格。还有一些控件不会呈现任何内容给浏览器;相反,它们只在服务器端才能够被处理,并且只为其他控件提供信息。

作为服务器端控件的 HTML 元素

作为使用 ASP.NET 服务器端控件的替代,你可以把普通的 HTML 元素当成服务器端控件使用。你可以为页面中的任何 HTML 元素添加 runat="server" 特性和 ID 特性。当页面运行的时候,ASP.NET 就会把这些元素识别成为服务器端控件并且让它在服务器端代码中变得可用。例如,你可以在 HTML body 元素中添加必需的元素,如下代码范例所示。

<body runat="server" id="body">

然后你就可以在服务器端代码中对这个 body 元素进行引用了,例如,在运行时设置主体的背景颜色来响应用户的输入或者来自于数据库的信息。

更多信息请参考[ASP.NET Web 服务器端控件]。

服务器端代码

多数 ASP.NET 页面都包含了页面被处理之后能够在服务器端所运行的代码。并且 ASP.NET 还支持许多种的编程语言,包括 C#、Visual Basic、J#、JScript,以及其他。

ASP.NET 支持两种模型来编写页面的服务器端代码。在单文件模型中,页面代码位于开始标记中包含有 runat="server" 特性的 script 元素中。本文中先前的范例就属于单文件模型。

作为选择,你也可以在单独的类文件中创建页面代码,这就是幕后代码模型。在这种情况下,ASP.NET Web 页面通常不需要包含任何服务器代码。另外,@ Page 指令还包含了 .aspx 页面以及与它所关联的幕后代码文件的链接信息。下面的代码范例就说明了一个在幕后代码文件模型中所使用的 @ Page 指令。

<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="Default" %>

CodeFile 特性指定了类文件的名称,而 Inherits 特性指定了幕后代码文件中与页面进行通讯的类名称。

更多信息请参考[ASP.NET Web 页面代码模型]。

提示:ASP.NET Web 页面同样可以包含运行在浏览器中并且响应客户端事件的客户端脚本。并且一个 ASP.NET 页面中能够同时包含客户端脚本与服务器端代码。更多信息请参考[使用客户端脚本的 ASP.NET Web 页面编程]。

posted on 2007-09-05 19:57  Laeb  阅读(2296)  评论(0编辑  收藏  举报