1、 传统ASP程序的实现9.1 ASP.NETWeb应用程序的构建9.2 ASP.NET Hello World9.3 ASP.NET服务器端控件9.4 思考题9.5动态服务器页面(Active Server Pages,简称为ASP)是微软公司发布的,它将VBScript、JavaScript脚本语言代码嵌入在标准的HTML文档中,实现了在服务器端动态生成HTML页面的功能。Hello World Im an ASP Program It is now Hello.html文件的代码如下:ResponseHello.aspx文件的代码如下:通过Visual Studio的“Web Forms模
2、板”可以快速生成ASP.NET应用程序通过项目的生成,我们获得了一个已经具有很多功能的Web网站项目Web项目运行在菜单中选择“项目”,点击“属性”可以进入属性编辑界面ASP.NET空Web应用程序一个空Web应用程序建立后,在解决方案资源管理器中只有“Properties”、“引用”和“Web.config”三个部分。其中Web.config文件中包括了项目的基本配置参数,内容如下:可以看出,Web.config是一个XML文档,其中配置了项目的编译选项(debug)和.NET framework版本。在系统开发的过程中还会在该文件中增加更多的数据内容。在“项目”菜单中点击“添加新项”来创建
3、一个名为“Default.aspx”的页面在解决方案资源管理器中可以看到名为“Default.aspx”的文件,点击文件前面的白色三角,还可以展开出其它的两个文件,分别是“Default.aspx.cs”和“Default.aspx.designer.cs”。三个文件是共同构成一个Web窗体的一组文件,缺一不可。其中,“Default.aspx”描述了运行在浏览器端的HTML元素和运行在服务器端的各个控件,代码如下:“Default.aspx.cs”描述了整个Web窗体类的一部分,主要是服务器端控件的各种事件响应函数和用户编写的代码,代码如下:using System;using System
4、.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Hello public partial class Default:System.Web.UI.Page protected void Page_Load(object sender,EventArgs e)“Default.aspx.designer.cs”则描述了整个Web窗体类的另一部分,主要是服务器端控件的声明和属性设置等。需要注意的是:此代码由开发工
5、具自动生成的。代码如下:namespace Hello public partial class Default /form1 控件。/自动生成的字段。/若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。/protected global:System.Web.UI.HtmlControls.HtmlForm form1;ASP.NET程序的请求、响应以及编译过程目录名称目录名称说明说明根目录根目录包含了网站的配置文件、母版文件和默认的网页文件等。Account包含了大量与系统注册和登录相关的页面,甚至模板自动生产了忘记密码、修改密码等常用功能页面。App_Data包含了ASP.NET网
6、站的数据库文件,包括Access(mdb)文件或者SQL Server(mdf)文件。如果网站不是以文件方式而是服务器方式访问数据库,那这个目录中就不会有数据库文件。Content包含了CSS和其他非Scripts和图像的网站内容。Models包含了表示和操纵数据以及业务对象的类。Scripts包含了JavaScript 类库文件和脚本文件。扩展名扩展名说明说明.htm、.html用 HTML 代码编写的静态 Web 文件。.css用于确定 HTML 元素格式的样式表文件。.js用JavaScript代码编写的浏览器端脚本文件。.aspxASP.NETWeb 窗体文件(页),该文件可包含 We
7、b 控件及显示和业务逻辑。.cs运行时要编译的C#类源代码文件。类可以是 HTTP 模块、HTTP 处理程序、ASP.NET页的代码隐藏文件或包含应用程序逻辑的独立类文件。.ascxWeb 用户控件文件,该文件定义可重复使用的自定义控件。.config配置文件(通常是 Web.config),该文件包含表示ASP.NET功能设置的 XML 元素。.asax通常是 Global.asax 文件,该文件包含从 HttpApplication 类派生的代码。该文件表示应用程序,并且包含应用程序生存期开始或结束时运行的可选方法。.slnVisual Studio项目的解决方案文件。.csproj基于C
8、#的Visual Studio应用程序项目的项目文件。.master母版页,定义应用程序中其他网页的布局。.resx资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串。.sitemap站点地图文件,该文件包含网站的结构。ASP.NET中附带了一个默认的站点地图提供程序,它使用站点地图文件可以很方便地在网页上显示导航控件。ASP.NET程序开发的最基本步骤。打开“Default.aspx”文件,从编辑区域的底部选择“设计”以便进行可视化编辑。从工具箱中选择“标准”中的“Label”控件,将其拖拽到编辑区域中的虚框中。这个虚框实际上是aspx文件中的元素的区域。在aspx文件中,所有
9、的服务器端控件都应当被放置在系统自动生成的这个元素中,以形成ASP.NET赖以运行的前后台信息传递机制。在可视化编辑界面中选中刚刚拖放进来的Label控件,可以在IDE右下部分的“属性”区域设置它的属性。将其Text属性的值从“Label”修改为“Hello World”,本程序所需的功能就完成了。“Default.aspx”源代码 “Default.aspx.designer.cs”代码如下:namespace Hello public partial class Default /form1 控件。/自动生成的字段。/若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。/protect
10、ed global:System.Web.UI.HtmlControls.HtmlForm form1;/Label1 控件。/自动生成的字段。/若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。/protected global:System.Web.UI.WebControls.Label Label1;除了可以在代码编辑的过程中设置了Label1对象的Text属性,还可以在程序运行的时候修改Label1对象的Text属性。在“Default.aspx.cs”文件的Page_Load函数中增加一条语句,就可以在网页装载的时后设置Label1对象的Text属性值为“Hello Worl
11、d 2”。代码如下:Label1.Text=Hello World 2;运行后可以看到,网页中没有显示“Hello World”,而是直接显示了“Hello World 2”。我们继续在aspx文件的可视化编辑中拖放一个按钮(Button1),将其放在Label1对象的旁边。在可视化编辑区域双击Button1按钮,开发工具将自动跳转到“Default.aspx.cs”文件的编辑界面,并且会自动增加Button1_Click函数作为“按钮Click事件”的处理函数。在“Default.aspx.cs”文件的Button1_Click函数中增加一条语句,就可以在按钮被点击后后再次设置Label1对
12、象的Text属性值为“Hello World 3”。代码如下:Label1.Text=Hello World 3;运行后可以看到,网页加载后显示了“Hello World 2”,而当用户点击按钮后网页显示了“Hello World 3”。ASP.NET程序执行的过程 按照运行机理划分,ASP.NET提供了三种服务器端控件与HTML标签相同并直接映射HTML元素的“HTML服务器控件”(HTML Server Controls)以新的标签来定义的“Web服务器控件”(Web Server Controls)检查输入是否合理的“验证服务器控件”(Validation Server Controls
13、)。HTML服务器控件(以下简称为HTML控件)虽然使用客户端HTML文档中的各种标签,但却先在服务器中执行,然后才返回浏览器端呈现为各种HTML元素。Aspx文件中一般的HTML元素都会被看作为字符串文本,在运行生成HTML文档时就直接粘贴过去。但如果在标签中加入runat=server的属性,就使得该控件被定义为在服务器端执行,执行的结果(HTML片段)被粘贴到最终的HTML文档中。控件中所包含的id属性是HTML控件的标示(对象名称),通过这个标示,服务器端的代码可以在运行的时候操控这个控件。下列代码定义了一个HTML控件link1,它是一个超链接控件,但在aspx代码中没有给出超链接的
14、地址。Visit Hello World!可以在cs文件的Page_Load函数中加入语句,使得aspx页面在运行时动态地设置link1的超链接地址,代码如下:protected void Page_Load(object sender,EventArgs e)link1.HRef=http:/;当浏览器调用此网页的时候,服务器端代码会被执行,可以输入如下HTML代码交给浏览器:Visit Hello World!可以看到,HTML控件其实就是HTML元素的基础上加上runat=server所构成的控件,服务器代码执行后,HTML控件会转变为浏览器端HTML元素。与HTML服务器控件相似,We
15、b服务器控件(以下简称为Web控件)也具有runat=server属性,也需要在服务器端运行,但Web控件的标签却不是HTML标签。某个Web控件也不一定会直接对应某个HTML元素,它可能对应多个元素或者更复杂的HTML代码片段,比如Calendar(日历)控件。下面是定义Web控件的语法:从HTML的语法中我们知道,网页中呈现的“按钮”实际上是由标签构成,但在ASP.NET的Web控件中却提供了Button控件。响应的cs文件中定义了按钮OnClick事件对应的事件处理函数submit,函数执行时会将按钮上面的文字改为“You clicked me!”。protected void subm
16、it(object sender,EventArgs e)WebButton.Text=You clicked me!;当浏览器第一次调用此网页的时候,服务器端代码会被执行,可以输入如下HTML代码交给浏览器(为方便说明,HTML代码进行了删减):可以看到,Web控件Button在执行后形成了元素,其type=submit,value=Click me!,当点击此按钮时会提交form1表单,服务器将运行submit函数,然后再次返回一个HTML文件。此时,HTML元素中value=You clicked me!。验证服务器控件(以下简称为验证控件)可以检查用户的输入是否符合特定的格式要求,比如
17、数字、电子邮件地址等。如果用户输入错误,则在网页中指定的地方为用户显示错误信息。我们可以理解,对于用户输入的验证可以有浏览器端直接进行,也可以将用户输入返回到服务器端进行。浏览器端的验证需要用JavaScript脚本,由于不需要与服务器交换数据,所以效率高,响应时间短;服务器端的验证需要用C#语言所编写的代码进行,但每次提交都要把数据传到服务器,所以响应速度慢。ASP.NET的验证控件之所以不同于一般的Web服务器控件,就是这些验证控件非常“智能”。如果浏览器支持JavaScript,则验证控件会以HTML元素和JavaScript代码的形式发给浏览器,验证的工作就在浏览器中进行;反之,如果客户机不支持用于验证的JavaScript,或者开发者专门进行设置要求在服务器端验证,则所生成的HTML将不会包含相应的JavaScript代码就,验证就在服务器上进行。(1)试举例说明传统的ASP程序的执行过程。(2)试举例说明ASP.NET程序的执行过程。(3)什么是服务器控件,ASP.NET提供了哪几类服务器端控件?