大宴铜雀台简介:asp

来源:百度文库 编辑:音乐简谱网 时间:2019/09/16 23:24:14

用 HTML 编写的 Hello W3School

这张 HTML 页面的 HTML 代码:

Hello W3School!

如果您希望亲自试一试,可以把这些代码保存在名为 "firstpage.html" 的文件中,然后创建一个到此文件的链接,就像这样:firstpage.html。

用 ASP.NET 编写的 Hello W3School

把 HTML 页面转换为 ASP.NET 的最简单的方法是,把这个 HTML 文件拷贝为带有 .aspx 后缀的新文件。

这些将把我们的例子显示为一个 ASP.NET 页面:

Hello W3School!

如果您希望亲自试一试,请把这些代码保存在一个名为 "firstpage.aspx" 的文件中,并创建一个到此文件的链接:firstpage.aspx。

它如何工作?

从根本上讲,ASP.NET 页面与 HTML 完全相同。

HTML 页面的扩展名是 .htm 或 .html。假如浏览器从服务器请求某张 HTML 页面,服务器不进行任何修改,就会把该页面发往浏览器。

ASP.NET 页面的扩展名是 .aspx。如果浏览器请求某张 ASP.NET 页面,那么在把结果发回浏览器之前,服务器首先会处理页面中的可执行代码。

上面的 ASP.NET 页面不包含任何可执行的代码,因此也不会执行任何代码。在下面的例子中,我们将向页面添加一些可执行代码,以便向您演示静态 HTML 页面与动态 ASP 页面的不同之处。

经典的 ASP

Active Server Pages (ASP) 已经流行很多年了。通过 ASP,可以把可执行代码放置于 HTML 页面内部。

ASP.NET 之前的 ASP 版本经常被称为经典 ASP(Classic ASP)。

ASP.NET 不完全兼容 Classic ASP,但是通过少量的修改,Classic ASP 可以良好地作为 ASP.NET 进行工作。

如果您希望学习更多有关 Classic ASP 的知识,请访问我们的 ASP 教程。

用 Classic ASP 编写的动态页面

为了向您演示如何使用动态内容显示页面,我们向上面的例子添加了一些可执行代码:

Hello W3School!

<%Response.Write(now())%>

<% --%> 标签内的代码在服务器上执行。

Response.Write 是 ASP 代码,用来向 HTML 输出流文本。

Now() 是一个可返回服务器当前日期和时间的函数。

如果您希望亲自试一试,可以把这些代码保存在名为 "dynpage.asp" 的文件中,并创建一个指向该文件的链接:dynpage.asp。

用 ASP .NET 编写的动态页面

下面的代码可把我们的例子显示为一个 ASP.NET 页面:

Hello W3School!

<%Response.Write(now())%>

如果您希望亲自试一试,请把这些代码保存在名为 "dynpage.aspx" 的文件中,然后创建到此文件的链接:dynpage.aspx。

ASP.NET vs Classic ASP

上面的例子无法展示出 ASP.NET 与 Classic ASP 之间的不同之处。

正如您在最后的两个例子中看到的,在这个两个 ASP 和 ASP.NET 页面之间,没有什么不同之处。

在下面的章节,您会看到,服务器控件如何使 ASP.NET 比 Classic ASP 更加强大。

Classic ASP 的局限性

下面列出的代码是从上一节中拷贝的:

Hello W3School!

<%Response.Write(now())%>

上面的代码能够反映出 Classic ASP 的局限性:代码块必须放置在需要进行输出的位置。

通过 Classic ASP,我们是无法将可执行代码与 HTML 本身进行分离的。这使得页面难以阅读,也难以维护。

ASP.NET - 服务器控件

通过服务器控件,ASP.NET 已经解决了上面所描述的“意大利面条式代码”的问题。

服务器控件是可被服务器理解的标签。

有三种类型的服务器控件:

  • HTML 服务器控件 - 传统的 HTML 标签
  • Web 服务器控件 - 新的 ASP.NET 标签
  • Validation 服务器控件 - 用于输入验证

ASP.NET - HTML 服务器控件

HTML 服务器控件是服务器可理解的 HTML 标签。

ASP.NET 中的 HTML 元素是作为文本来进行处理的。要想使这些元素可编程,就需要向这些 HTML 元素添加 runat="server" 属性。该属性指示,此元素是一个服务器控件。同时要添加 id 属性来标识该服务器控件。id 引用可用于操作运行时的服务器控件。

注释:所有 HTML 服务器控件必须位于带有 runat="server" 属性的

标签内。runat="server" 属性指示该表单应在服务器进行处理。它同时指示其包括在内的控件可被服务器脚本访问。

在下面的例子中,我们在 .aspx 文件中声明了一个 HtmlAnchor 服务器控件。然后我们在一个事件句柄中操作该 HtmlAnchor 控件的 HRef 属性。Page_Load 事件是众多 ASP.NET 可理解的事件中的一种类型:

注释:事件句柄(event handler)是一种针对给定事件执行代码的子例程。

Visit W3School!

提示:可执行代码本身已被移到 HTML 之外了。

ASP.NET - Web 服务器控件

Web 服务器控件是服务器可理解的特殊 ASP.NET 标签。

类似 HTML 服务器控件,Web 服务器控件也在服务器上创建,它们同样需要 runat="server" 属性以使其生效。不过,Web 服务器控件没有必要映射任何已存在的 HTML 元素,它们代表更复杂的元素。

创建 Web 服务器控件的语法是:

在下面的例子中,我们在 .aspx 文件中的声明了一个 Button 服务器控件。然后我们为 Click 事件创建了一个事件句柄,它可修改按钮上的文本:

ASP.NET - Validation 服务器控件

Validation 服务器控件用于验证用户输入。如果用户输入没有通过验证,将给用户显示一条错误消息。

每种 validation 控件执行一种特定的验证类型(比如验证某个具体的值或者某个范围的值)。

默认地,当点击 Button, ImageButton 或 LinkButton 时,页面验证才会被执行。您可通过把 CausesValidation 属性设置为 false,来阻止某个按钮控件被点击时进行验证。

创建 Validation 服务器控件的语法是:

在下面的例子中,我们在 .aspx 文件中声明了一个 TextBox 控件,一个 Button 控件,以及一个 RangeValidator 控件。如果验证失败,文本 "The value must be from 1 to 100!" 将显示在 RangeValidator 控件中:

Enter a number from 1 to 100:

TIY

ASP.NET - 事件句柄

请看下面的代码:

<%lbl1.Text="The date and time is " & now()%>

上面的代码什么时候会被执行?答案是:“我不知道. . .”

Page_Load 事件

Page_Load 事件是众多 ASP.NET 可理解的事件之一。Page_Load 事件会在页面加载时被触发,然后 ASP.NET 会自动调用子例程 Page_Load,并执行其中的代码:

注释:该 Page_Load 事件不包含对象引用或事件参数!

TIY

Page.IsPostBack 属性

Page_Load 子例程会在页面每次加载时运行。如果您仅希望在页面第一次加载时执行 Page_Load 子例程中的代码,您可以使用 Page.IsPostBack 属性。如果 Page.IsPostBack 属性为 false,则页面第一次被载入,如果为 true,则页面传回服务器(例如,通过点击表单上的按钮):

上面的例子仅在页面初次加载时创建 "The date and time is...." 这条消息。当用户点击 Submit 按钮时,submit 子例程将在第二个 label 创建 "Hello World!",但第一个 label 中的日期和时间不会改变。

TIY

所有服务器控件必须出现在

标签内,同时 标签必须包含 runat="server" 属性。

ASP.NET Web 表单

所有服务器控件必须出现在 标签内,同时 标签必须包含 runat="server" 属性。runat="server" 属性指示该表单必须在服务器进行处理。它还指示装入其中的控件能否被服务器脚本访问:

...HTML + server controls

注释:该表单总是向自身页面进行提交。如果您规定了一个 action 属性,它会被忽略。如果您省略了 method 属性,它将被默认地设置为 method="post"。同时,如果您没有规定 name 和 id 属性,它们则由 ASP.NET 自动分配。

注释:一个 .aspx 仅能包含一个

控件!

如果您查看一个 .aspx 页面的源代码,而其中包含的表单不带有 name, method, action 或 id 属性,那么您将看到 ASP.NET 已经把这些属性添加到该表单。类似这样:

...some code

提交表单

表单通常通过点击一个按钮来提交。ASP.NET 中的 Button 服务器控件的格式是这样的:

id 属性为按钮定义了一个唯一的名称,而 text 属性则为按钮分配了一个 label。onClick 事件句柄规定了一个要执行的子例程。

在下面的例子中,我们在一个 .aspx 文件中声明了一个按钮控件。一次鼠标单击就可以运行一个子例程,可以更改该按钮上的文本。

TIY过在 Web 表单中维持对象的 ViewState (视图状态),您可以省去大量的编码工作。

维持 ViewState (视图状态)

当 classic ASP 中的表单被提交时,所有的表单值都会被清空。设想一下,您提交了一张带有大量信息的表单,而服务器返回了一个错误。您将不得不返回表单,然后更正其中的信息。您点击后退按钮,然后会发生什么呢... 所有的表单值都被清空了,而您将不得不重新开始所有的一切。站点不会维持您的 ViewState。

当 ASP .NET 中的表单被提交时,表单会随所有表单值一同重新出现。如何做到的呢?这是由于 ASP .NET 维持了您的 ViewState。ViewState 会在页面被提交到服务器时指示其状态。通过在每张页面中的一个

控件中放置一个隐藏域,我们就可以定义页面的状态了。源代码可能类似这样:

.....some code

维持 ViewState 是 ASP.NET Web 表单的默认设置。如果您不希望维持 ViewState,请在 .aspx 页面的顶部包含指令: <%@ Page EnableViewState="false" %>,或为任意控件添加属性:EnableViewState="false"。

请看下面的 .aspx 文件。它演示了老的运行方式。当您单击提交按钮时,表单值就会消失:

Your name:
<%dim fnamefname=Request.Form("fname")If fname<>"" ThenResponse.Write("Hello " & fname & "!")End If%>

TIY

这是新的 ASP .NET 方式。当您点击提交按钮时,表单值不会消失:

Your name:

TextBox 控件

TextBox 控件用于创建用户可输入文本的文本框。

TextBox 控件的属性列在我们的 TextBox 控件参考手册中。

下面的例子演示了您可能在 TextBox 控件中使用到的一些属性:

TIY

A basic TextBox:

A password TextBox:

A TextBox with text:

A multiline TextBox:

A TextBox with height:

A TextBox with width:

添加脚本

当表单被提交时,TextBox 控件的内容和设置可通过服务器脚本进行修改。可通过点击一个按钮或当用户更改 TextBox 控件中的值对表单进行提交。

在下面的例子中,我们在一个 .aspx 文件中声明了一个 TextBox 控件、一个 Button 控件和一个 Label 控件。当提交按钮被触发时,submit 子例程就会被执行。submit 子例程会向 Label 控件写一条文本:

Enter your name:

TIY

在下面的例子中,我们在一个 .aspx 文件中声明了一个 TextBox 控件和一个 Label 控件。当您更改了 TextBox 中的值,并且在 TextBox 外单击时,change 子例程就会被执行。change 子例程会向 Label 控件写一条文本:

Enter your name:

控件用于显示一个按钮。

Button 控件

Button 控件用于显示一个按钮。按钮可以是提交按钮或命令按钮,而该控件是一个提交按钮。

submit 按钮没有命令名称,当它被点击时,它把页面传回服务器。可以编写一些事件句柄,在提交按钮被点击时来控制动作的执行。

command 按钮拥有命名名称,且允许你在页面上创建多个 Button 控件。可以编写一些事件句柄,在 command 按钮被点击时来控制动作的执行。

Button 控件的属性列在我们的 Button 控件参考手册中。

下面的例子演示了一个简单的 Button 控件:

添加脚本

表单通常通过点击按钮进行提交。

在下面的例子中,我们在 .aspx 文件中声明了一个 TextBox 控件、一个 Button 控件以及一个 Label 控件。当这个提交按钮被点击时,submit 子例程就会被执行。该 submit 子例程会向 Label 控件写一条文本:

Enter your name:

TIY