




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章模块1——会员登录模块2.1【任务1】创建简单的Web应用程序2.2【任务2】会员登录实现2.3【任务3】会员登录状态管理
【本章提要】
会员登录是所有Web应用系统所必需的功能之一,本章以校园在线超市会员登录模块的实现为主线,实现了在VS2005中创建简单应用程序、会员登录模块实现和会员登录状态管理三个典型的任务。
【学习目标】
·理解ASP.NET2.0的工作模型。
·掌握应用程序配置方法。
·理解事件驱动编程模型。
·掌握HTML服务器控件和Web服务器控件的区别。
·掌握常用内置对象Response和Request的使用。
·掌握Cookie对象的使用。
任务描述
熟悉Web应用程序所需的开发环境,并创建一个简单的Web应用程序,为校园在线超市系统创建雏形,并在首页中显示“欢迎来到校园在线超市”。2.1【任务1】创建简单的Web应用程序
必备知识
知识1ASP.NET2.0工作模型
ASP.NET是Web服务器(IIS)的ISAPI扩展。当IIS接收到客户端浏览器发来的请求后,它根据请求的文件类型确定由哪个ISAPI扩展来处理该请求,并将请求转发给ASP.NET。ASP.NET应用程序首先进行初始化,并装载配置模块,然后经过一系列步骤来完成对客户端请求的响应。ASP.NET工作过程分为以下几个阶段。
1.阶段1:用户从浏览器中请求网页( .aspx)
当IIS收到请求后,会对所请求文件的扩展名进行检查,确定应由哪个ISAPI扩展来处理该项请求,然后将该请求传递给合适的ISAPI扩展。也就是说,IIS将该项请求付给ASP.NET。
2.阶段2:ASP.NET接收对应用程序的第一个请求
当ASP.NET接收到对应用程序中任何资源的第一个请求时,应用程序域管理器(ApplicationManager)将会创建一个应用程序域;在应用程序域中,将创建宿主环境(HostingEnvironment类的实例),它提供对有关程序的信息(如存储该应用程序的文件夹的名称)的访问。
3.阶段3:为每个请求创建ASP.NET核心对象
创建了应用程序域并实例化了宿主环境之后,ASP.NET将创建并初始化核心对象,如HttpContext、HttpRequest和HttpResponse。HttpContext类包含特定于当前应用程序请求的对象,如HttpRequest和HttpResponse对象。HttpRequest对象包含有关当前请求的信息,包括Cookie和浏览器信息。HttpResponse对象包含发送到客户端的响应,包括所有呈现的输出和Cookie。
4.阶段4:将HttpApplication对象分配给请求
初始化所有核心应用程序对象之后,将通过创建HttpApplication类的实例启动应用程序。如果应用程序具有Global.asax文件,则ASP.NET会创建Global.asax类(从HttpApplication类派生)的一个实例,并使用该派生类表示应用程序。同时,ASP.NET将创建所有已配置的模块(如状态管理模块、安全管理模块),在创建完所有已配置的模块后,将调用HttpApplication类的Init方法。图2-1说明了这种关系。
图2-1HttpApplication对象分配
5.阶段5:由HttpApplication处理请求
在此阶段,将由HttpApplication类执行一系列的事件(如BeginRequest、ValidateRequest等),并根据所请求资源的文件扩展名(在应用程序的配置文件中映射)选择实现了HttpHandler的类来对请求进行处理。如果该请求针对从Page派生的对象,并且需要对该项页进行编译,则ASP.NET会在创建该页的实例之前对其进行编译,在装载后用该实例来处理这个请求,处理完后通过HttpResponse输出,最后释放该实例。知识2使用VS2005创建Web站点
1.VS2005简介
VS2005(VisualStudio2005)是一套完整的开发工具集,用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。它提供统一的集成开发环境(IDE),可使用多种开发语言(VisualBasic、VisualC++、VisualC#
和VisaulJ#),这些语言利用了
.NETFramework的功能,通过此框架可以简化ASP.NETWeb应用程序和XMLWebServices开发的关键技术。
2.VS2005中Web站点的类型
通过VS2005可能创建和配置几种类型的Web应用程序(也称ASP.NET站点):文件系统站点、本地IIS站点、远程IIS站点和文件传输协议(FTP)站点。
1)文件系统站点
VS2005能够将站点的文件存储在本地硬盘上的一个文件夹中,或存储在局域网上的一个共享位置。使用该类型的站点具有以下优点:
①不希望或无法在自己的计算机上安装IIS。②文件夹中已有一组Web文件,可将这些文件作为项目打开。
③文件存储在中心服务器上某一特定的文件夹中。
④在工作组设置中,工作组成员可访问中心服务器上的公共站点。
使用该类型的站点的缺点是:不能使用基于HTTP的身份验证、应用程序池和ISAPI筛选器等IIS功能测试文件系统站点。
2)本地IIS站点
一个本地Internet信息服务(IIS)站点就是本地计算机上的一个IISWeb应用程序,VS2005通过使用HTTP协议可与该站点通信。
使用该类型站点的优点是,可以用IIS测试站点,从而逼真地模拟站点在正式服务器中的情况。相对于使用文件系统站点,这更具有优势,因为路径将按照其在正式服务器上的方式进行解析。使用该类型的站点具有以下缺点:
①必须装有Internet信息服务。
②必须具有管理员权限才能创建或调试IIS站点。
③一次只有一个计算机用户可以调试IIS站点。
④默认情况下,为本地IIS站点启用了远程访问。
3)远程IIS站点
当要通过使用在远程计算机上运行的IIS创建站点时,可使用远程站点。远程计算机必须配置FrontPage服务器进行扩展,且在站点级别上启用它。
使用该类型站点的优点如下:
①可以在部署站点的服务器上测试该站点。
②多个开发人员可以同时使用同一远程站点。
使用该类型的站点具有以下缺点:
①远程计算机上的IIS版本必须是5.0以上版本。
②针对调试远程站点的配置可能很复杂。
③一次只有一个开发人员可以调试远程站点,当开发人员单步调试代码时,所有其他请求均被挂起。
4)文件传输协议站点
当某一站点已位于配置为FTP服务器的远程计算机上时,可使用FTP部署的站点。使用该类型的站点可以在部署FTP站点的服务器上测试该站点。然而,该类型站点没有FTP部署的站点文件的本地副本,除非自己复制这些文件。另一方面,它不能创建FTP部署的站点,只能打开一个这样的站点。
3.VS2005中Web应用的结构
1)
ASP.NET站点布局
为了易于使用Web应用程序,ASP.NET保留了某些可用于特定类型内容的文件和文件名称。右击“解决方案资源管理器”中的“项目”→“添加ASP.NET文件夹”,可以根据项目需要添加特定类型内容的文件和文件夹,如图2-2所示。
图2-2解决方案资源管理器
(1)默认页
默认页是在用户定位到某一站点时,在没有指定页的情况下为用户显示的页,这将使用户容易地定位到一个站点。当创建Web应用程序的时候,默认创建一个名为Default.aspx的页,并将其保存在根目录中。
(2)应用程序文件夹
ASP.NET识别可用于特定类型内容的文件夹名称,以下列出了保留的文件夹名称以及文件夹中通常包含的文件类型。①App_Browsers:包含浏览器定义(
.browser)文件。
②App_Code:包含作为应用程序一部分进行编译的实用工具类和业务对象的源代码或子文件夹。
③App_Data:包含应用程序数据文件,包括MDF文件、XML文件和其他数据存储文件。
④App_GlobalResources:包含编译到具有全局范围的程序集中的资源。
⑤App_LocalResources:包含与应用程序中的特定页、用户控件或母版页关联的资源。
⑥App_Themes:包含用于定义ASP.NET网页和控件外观的文件集合。
⑦App_WebReferences:包含用于定义在应用程序中使用的Web引用的文件、架构和发现文档文件。
⑧Bin:包含用户要在应用程序中引用的控件、组件或其他代码的已编译程序集。
2)站点文件类型
站点应用程序中可以包含很多文件类型,某些文件类型由ASP.NET支持和管理(如
.aspx、.ascx等),而其他文件类型则由IIS服务器支持和管理(如
.html、.gif等)。表2-1列出了ASP.NET2.0中常用的文件类型及存储位置和说明。表2-1ASP.NET2.0常用文件类型
3)创建简单的Web应用程序
ASP.NET应用程序即是Web应用程序,它包含了所有的文件、页面、处理程序、模块和可执行代码等。
在编写程序之前,首先需要建立一个新网站。启动VS2005开发环境,在文件菜单中选择“新建”→“网站”,出现如图2-3所示窗口。选择已安装模板“ASP.NET网站”,设置“位置”为“文件系统”,“语言”为“VisualC#”,单击“确定”按钮。创建新网站后的界面如图2-4所示。
图2-3新建ASP.NET应用程序对话框
图2-4Web窗体设计界面图2-4所示的解决方案资源管理器中,文件Default.aspx是应用程序的默认页,称为ASP.NET窗体或ASP.NET页面。每一个ASP.NET窗体均有两种编辑模式,即设计模式和代码模式。设计模式下,双击页面空白处,会出现一个Default.aspx.cs文件,这是C#
代码文件,它所对应的类为Default.aspx页面文件的代码隐藏类。也就是说,任何一个ASP.NET窗体都由两个相关联的文件组成,分别为页面文件和代码文件,这就是ASP.NET的代码分离(隐藏)技术。如果对Default.aspx文件,用右键快捷菜单在浏览器中查看时,将会是一个空白的页面。为了便于理解和比较,下面先看看与这个空白页面相关的两个文件的内容。
Default.aspx文件的代码:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits
="_Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="/1999/xhtml">
<headrunat="server">
<title>第一个Web页</title>
</head>
<body>
<formid="form1"runat="server">
</form>
</body>
</html>这是一个HTML标记的页面代码。其中,第一行指明了与之关联的后台代码文件,后面将详细介绍;form标记的代码行中,runat为server时,标记为运行在服务器端,在后续编程过程中添加的Web服务器控件均置于<form>标记中。
Default.aspx.cs文件的代码:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
publicpartialclass_Default:System.Web.UI.Page{
protectedvoidPage_Load(objectsender,EventArgse){
//在此处放置用户代码以初始化页面
//页面加载时,执行此间代码
}}
使用using指令导入的构建Web窗体所需要的命名空间,这使得命名空间中的内容在程序中可以直接引用,如命名空间System中包含了各种数据类型及基本的输入、输出指令等。代码:
publicpartialclass_Default:System.Web.UI.Page
声明名为
_Default的类,该类继承于System.Web.UI命名空间下的Page类。知识3Web窗体与Page类
随着Web应用的不断发展,微软在
.NET战略中,提出了全新的Web应用开发技术ASP.NET,引入了Web窗体的概念。窗体界面元素被称为Web控件,像Windows窗体编程一样,将Web控件拖到窗体中进行可视化设计,可大大提高Web开发的效率。
1.Web窗体
Web窗体提供了一种直观方便的编程模型,它不仅可用于快速创建复杂的Web应用程序界面,而且可以实现功能复杂的业务逻辑和数据库访问。
Web窗体是ASP.NET网页的主容器,它的页框架是可以在服务器上用于动态生成Web页的可缩放公共语言运行库的编程模型。
Web窗体包含两种不同代码块的组合:
①含有页面布局和ASP.NET控件模板信息的HTML代码。它负责在浏览器上显示Web窗体,其扩展名为“.aspx”。②对Web窗体进行逻辑处理的ASP.NET代码。它负责生成在Web窗体上显示的动态内容,其扩展名为“.aspx.cs”。
上述两种代码块就是ASP.NET代码分离编程模式下的界面文件和相应的后台代码文件。
1)
Web窗体的主要特点
①基于MicrosoftASP.NET技术,在服务器上运行的代码动态生成界面,并将之发送到浏览器或客户端设备输出。
②兼容所有浏览器或移动设备。ASP.NET界面自动为样式、布局等功能呈现正确的、符合浏览器的HTML。此外,还可将ASP.NET界面设计为在特定浏览器上运行,并利用浏览器特定的功能。③Web窗体页几乎可以输出任何支持客户端浏览的语言,包括HTML、XML和Script等。
④兼容.NET公共语言运行时(CLR)所支持的任何语言,包括C#、VB.NET和Jscript.NET和J#。
⑤基于Microsoft.NETFramework生成,具有
.NETFramework的所有优点,包括托管环境、类型安全性和继承。
⑥具有灵活性,可以添加用户创建的控件和第三方控件。
2)
ASP.NET界面语法
ASP.NET界面文件的扩展名为
.aspx,该类文件的语法结构主要由以下指令、Head、窗体元素、Web服务器控件或HTML控件、客户端脚本和服务器端脚本组成。
(1)指令
窗体文件通常包含一些指令,这些指令允许用户为该页指定属性和配置信息,它们不会作为发送到浏览器的标记的一部分被呈现。常见指令有以下几类:
①@Page:页面指令,此指令最为常用,允许为页面指定多个配置选项,常在Web窗体界面文件中的第一行使用,它定义了ASP.NET页分析器和编译器使用的页面特定属性,只能包含在
.aspx文件中,如:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"
Inherits="_Default"%>
各属性含义见表2-2。表2-2@Page指令的主要属性②@Control:此指令允许指定ASP.NET用户控件。
③@Register:此指令允许注册其他控件以便在页面上使用。@Register指令声明控件的标记前缀和控件程序集的位置。如果要向页面添加用户控件或自定义ASP.NET控件,则必须使用此指令。
④@Master:此指令使用于特定的母版页。
⑤@OutputCache:此指令允许指定应缓存的页面,并指定以下参数,即何时缓存该页、缓存该页需要多长时间。
(2)
Head
在Head中的内容不会被显示(除标题外),但它们对于浏览器可能是非常有用的信息,如使用的HTML版本、脚本和样式表等内容。
(3)
Form(窗体)元素
如果页面包含允许用户与页面交互并提交该页面的控件,则必须包含一个form元素。使用form元素必须遵循以下规则:
①页面只能包含一个form元素。②form元素必须包含runat属性,其属性值设置为server时,允许在服务器代码中以编程方式引用页面上的窗体和控件。
③可执行回发的服务器控件必须位于form元素之内。
④开始标记不得包含action属性,ASP.NET可在处理页面时动态设置这些属性。
下面是一个典型的<form>标记:
<formid="form1"method="post"runat="server">
</form>
(4)
Web服务器控件
通常,在ASP.NET页中,都需要添加允许用户与页面交互的控件,包括按钮、文本框、列表等。下面是Web服务器控件使用的示例:
<formid="form1"method="post"runat="server">
<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>
<asp:ButtonID="Button1"runat="server"Text="Button"/>
</form>
(5)将HTML控件作为服务器控件
将普通的HTML控件作为服务器控件使用,可以通过将runat=″server″属性和ID属性添加到页面的任何HTML元素中。下面是HTML元素转换为服务器控件的示例:
<inputid="Button2"runat="server"type="button"value="button"/>
(6)客户端代码
客户端代码是在浏览器中执行的,因此执行客户端代码不需要回发Web窗体。客户端代码语言支持JavaScript、VBScript、Jscript和ECMAScript。下面是客户端代码示例:
<scriptlanguage="javascript"type="text/javascript">
functionButton1_onClick(){
}
</script>
(7)服务器端代码
服务器端代码是在服务器端执行的,页面代码位于Script元素中,该元素中的开始标记包含runat=″server″属性。下面是服务端代码示例:
<htmlxmlns="/1999/xhtml">
<asp:ButtonID="Button1"runat="server"Text="Button"/>
</html>
<scriptlanguage="c#"runat="server">
privatevoidButton1_Click(objectsender,System.EventArgse){
}
</script>
3)
Web窗体的生命周期
一个Web窗体的生命周期类似于在服务器中运行的Web进程的生命周期。Web窗体从实例化分配内存空间到处理结束释放内存,一般经历四个步骤:初始化、页面装载、事件处理和资源清理。
(1)页面初始化
页面生命周期中的第一个阶段是初始化,其标志是Page_Init事件。当Init事件发生时,.aspx文件中声明的控件被实例化,并采用各自的默认值。
(2)页面装载
页面装载在初始化之后进行,所发生的事件为Page_Load。它根据Page.IsPostBack属性检查页面是不是第一次被处理;第一次处理页面时执行数据绑定,或者在以后的循环过程中重新判断数据绑定表达式;读取或更新控件属性;恢复所保存的前一个客户请求的状态。
(3)事件处理
Web窗体上的每个动作都激活一个到达服务器的事件。一个Web窗体有两个视图:一个客户视图和一个服务器视图。所有的数据处理都在服务器上进行。当通过单击鼠标或其他方法触发一个事件时,事件就到达服务器并返回相应的数据。
(4)资源清理
发生于一个窗体完成了它的任务,并且准备卸载的时候,激活Page_Unload事件,以完成最后的资源清理工作,如关闭文件、关闭数据库连接、释放对象等。
2.Page类
Page类与扩展名为
.aspx的文件相关联,用作Web应用程序的用户界面的控件。这些文件在运行时被编译为Page对象,并被缓存在服务器的内存中。Page类有很多属性,在编程实践中,经常用到的Page对象的属性主要有IsPostBack和IsValid。
1)
IsPostBack属性
IsPostBack属性用于获取一个布尔值,该值指示该页是否为首次加载。如果IsPostBack的值为true,则表示当前页面是由于客户端返回数据而加载的。新建一个Web窗体,添加一个按钮,并在Page_Load事件响应方法中添加如下代码,分别查看页面首次加载和单击按钮的运行效果:
privatevoidPage_Load(objectsender,System.EventArgse){
if(!IsPostBack){
Response.Write("首次加载");
}else{
Response.Write("页面回送");
}}
2)
IsValid属性
获取一个布尔值,该值指示页面验证是否成功。在实际应用中,往往会验证页面提交的数据是否符合预期设定的格式要求等,如果所有符合则IsValid值为true,否则为false:
privatevoidButton1_Click(objectsender,System.EventArgse){
if(IsValid){
Response.Write("页面验证通过");}
}
任务实现
步骤1选择“开始”→“程序”→“MicrosoftVisualStudio2005”,出现如图2-5所示的窗口。
图2-5VisualStudio2005起始页窗口步骤2单击“文件”→“新建”→“网站”,选择VisualStudio已安装的模板“ASP.NET网站”,设置“位置”为“文件系统”,“语言”为“VisualC#”,单击“确定”按钮。
步骤3单击解决方案中的Default.aspx页,切换到设计视图,输入文字“欢迎来到校园在线超市”,如图2-6所示。
步骤4单击菜单“调试”→“启动调试”,如果程序没有错误,将在浏览器中打开Default.aspx页面,如图2-7所示。
图2-6设置Default.aspx页面
图2-7浏览器中显示Default.aspx页面
任务描述
在校园在线超市系统中,注册会员在登录页面输入用户名和密码,点击“确定”按钮后,将在另一个页面中显示:“×××,欢迎进入校园在线超市”提示信息,并显示用户的登录密码。2.2【任务2】会员登录实现必备知识
知识1事件驱动编程
传统的程序一般按从上至下的顺序执行,即便使用的是函数,也不会改变程序的执行顺序。使用过ASP编程的程序员,对ASP的线性处理模型是有体验的,ASP页面也是按照从上到下的顺序处理的,其ASP代码和静态的HTML的每一行都按其在文件中的显示顺序进行处理,在往返过程中通过用户操作将页面请求发送到服务器。然而,事件驱动编程这种模式改变了传统的编程模式。
1.事件驱动编程
事件是一对象发送消息通知另一对象操作的机制,可以用于对象间的同步和信息传递。Windows操作系统是由事件驱动的,它不以顺序方式执行。Windows启动后,就等待事件的发生。例如,当用户单击“开始”按钮时,就触发了“开始”按钮的单击事件。只要发生了事件,Windows就会执行相应的动作以处理该事件。如果单击了某一程序的菜单,则菜单会立即显示出来,然后等待用户的下一个操作。Windows是许多代码组的集合,每个代码组都是在事件调用时执行的。在ASP.NET中,页面显示在浏览器上,等待用户交互。当用户单击按钮时就发生一个事件。程序会执行相应代码,以响应事件。在代码执行结束时,页面返回,继续等待下一个事件。事件驱动编程使ASP.NET编程更接近于Windows编程。开发者只需要编写响应事件的代码即可,并且可以将事件驱动编程的知识从Windows桌面应用程序扩展到Web应用程序上。事件驱动编程的另一个优点是可以使处理数据的代码与页面显示代码分离。ASP.NET允许开发者使用代码分离机制将Web应用程序逻辑(通常用C#
和VB.NET开发)从表示层(通常是HTML格式)中分离出来。通过逻辑层和表示层的分离,ASP.NET允许多个页面使用相同的代码,从而使维护更容易。开发者不需要为了修改一个编程逻辑问题而去浏览HTML代码,Web设计者也不必为了修正一个页面错误而通读所有代码。
ASP.NET的事件可以分为以下几类:
·HTML事件:这些事件可以在页面上发生,并由浏览器在客户端处理,如在客户端JavaScript中运行的弹出工具提示或菜单扩展。
·自动触发事件:ASP.NET页面生成时,会自动触发一些事件,它们不需要干涉,在用户看到页面之前执行,使用这些事件可以建立页面。
·用户交互事件:用户与页面交互时触发的事件,这些事件直接与ASP.NET的Web控件相关,如Button控件的Click事件。
2.事件处理
在现实生活中,委托别人办事的情况时有发生,而委托别人办的事能不能办好,主要取决于以下两个方面:
·是否委托给了合适的委托对象。
·是否传递了解决委托事件所需要的正确和必要的信息。
例如,经理委托他的秘书把A01项目策划案拿过来。这种委托就是成功的,因为经理委托秘书(委托对象合适),且明确要A01项目的策划案(正确和必要的信息传递)。
ASP.NET的事件处理采用的就是一种委托机制,如按钮的Click事件,编程时在设计界面上双击按钮,程序会自动添加事件响应方法:
protectedvoidButton1_Click(objectsender,EventArgse){
//事件处理代码
}
一般情况下,事件的响应方法中都有两个参数。一个参数代表引发事件的对象sender,由于引发事件的对象是不可预知的,因此将其声明为Object类型(Object是所有对象的基类),适用于所有对象。另一个参数代表引发事件的具体信息,这在各种类型的事件中可能不同。第二个参数采用的EventArgs类型是事件数据类的基类,用于传递事件的细节。在编写程序时,如果使用方法,只需调用方法名称并传递相关参数。然而,事件的响应方法是怎样被关联的呢?下面的代码使Button1_Click事件响应方法和Click事件相关联:
this.Button1.Click+=newSystem.EventHandler(this.Button1_Click);
这里,EventHandler就是一个委托声明,Button1_Click方法将被自动识别,并被关联到相应的事件上。
知识2Web控件
通过任务一的学习,我们已经对Web窗体有了初步的了解。但是,当我们打开一个站点时,会看到页面中包含许多不同的元素,如图片、文本框、按钮或是超链接等,这些元素统称为控件。控件是一个可重用的组件或者对象,它不但有自己的外观,还有自己的属性和方法,其中大部分控件还可以响应特定的事件。通过VS2005的集成开发环境,可以简单地把一个控件拖放到一个Web窗体中。
为什么会有HTML服务器控件和Web服务器控件之分呢?这是因为一些控件是在服务器端存在的。服务器端控件有自己的外观,在客户端浏览器中服务器控件的外观由HTML代码来表现。服务器控件会在初始化时,根据客户的浏览器版本,自动生成适合浏览器的HTML代码。
1.HTML服务器控件
所有的Html服务器控件位于System.Web.UI.HtmlControls命名空间中,从HtmlControl基类中直接或间接派生出来。HTML服务器控件与XHTML表单元素密切相关。然而HTML服务器控件可以与服务器端程序代码交互,这些交互包括服务器端程序代码可以动态地改变HTML控件的显示和功能。
1)
HTML服务器控件的类型
最常用的HTML服务器控件相关类的说明如表2-3所示。
表2-3常用HTML控件及其类别2)HTML服务器控件常用属性
(1)
InnerHtml和InnerText属性
使用InnerHtml属性以编程方式修改HTML服务器控件的开始和结束标记中的内容。InnerHtml属性不自动对进出HTML实体的特殊字符进行编码。HTML实体允许显示特殊字符(如“<”字符),浏览器通常会将这些字符解释为具有特殊含义。<字符会被解释为标志的开头,并且不会在页面上显示。若要显示<字符,将需要使用实体<。
使用InnerText属性以编程方式修改HTML服务器控件的开始和结束标记之间的内容。与InnerHtml属性不同,InnerText属性自动对进出HTML实体的特殊字符进行编码。
(2)
Disabled属性
Disabled属性被称为禁止功能。禁止功能就是将一个对象的功能关闭,让对象暂时无法执行工作。所以,如果将对象的Disabled属性设为True时,该对象会显示为灰色,并且停止工作。只有将Disabled属性设回False,该控件才能正常工作。以Button对象为例,若该对象的Disabled属性被设定为True,则按钮无法被按下。
(3)
Visible属性
通过该属性可以显示或隐藏控件。
(4)
Attributes属性
有两个方法可以指定对象的属性,第一种是“对象.属性”的方式,另一种则是通过“对象.Attrbutes(″属性名称″)”来设置或获取属性。
(5)
Style属性
该属性可以用来设定控件的样式。表2-4列出了Style属性可以设定的样式。表2-4Style属性样式说明
3)将HTML控件转换成HTML服务器控件
默认情况下,服务器无法使用ASP.NET页面上的HTML元素,这些元素被视为传递给浏览器的不透明文本。但是,通过将HTML元素转换成HTML服务器控件,可以将它们公开为可以在基于服务器的代码中进行编程的元素。通过添加runat=″server″属性表明应将HTML元素作为服务器控件进行处理,再设置元素的id属性,这样就可以通过编程的方式引用控件。然后通过设置属性(Attribute)来声明服务器控件实例上的属性(Property)参数和事件绑定等。代码示例如下:
<inputid="Text1"type="text"runat="server"/>
<inputid="Button1"type="button"value="button"runat="server"/>
在上面的代码示例中,通过设置id和runat=″server″属性,将文本框和按钮这两个HTML控件转换成HTML服务器控件,这样就可以在服务器端直接访问它们的属性。
【例2-1】为HTML控件Button1添加服务器端单击事件,直接读取Text1控件的值,并输出到页面。
代码如下:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Llogin.aspx.cs"
Inherits="User_Llogin"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<scriptrunat="server">
protectedvoidButton1_OnClick(objectsender,EventArgse){
Response.Write(Text1.Value);
}
</script>
<htmlxmlns="/1999/xhtml">
<headrunat="server">
<title>无标题页</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<inputid="Text1"type="text"runat="server"/>
<inputid="Button1"type="button"value="button"runat="server"
onserverclick="Button1_OnClick"/>
</div>
</form>
</body>
</html>
运行【例2-1】的代码,在“Text1”文本框中输入“你好,欢迎进入ASP.NET世界!”后,单击“Button1”按钮,页面提交,并在页面上输出文本框内容。
2.Web服务器控件
ASP.NETWeb服务器控件是ASP.NET网页上的对象,参与页面的执行过程,并在客户端生成相应标记。在ASP.NET2.0中,Web服务器控件是指在服务器上执行程序逻辑的对象,包含自己的属性、事件和方法,当访问ASP.NET网页时运行对象,并调用对应的方法。
1)
Web服务器的特性
Web服务器控件与HTML服务器控件相比,其设计侧重点不同。它并不一对一地映射到HTML服务器控件,其中包括传统的表单控件,如TextBox和Button,以及其他更高抽象级别的控件,如Calendar和DataGrid控件。它们提供了一些能够简化开发工作的特性,其中包括:
·丰富而一致的对象模型。WebControl基类实现了对所有控件通用的属性,这些属性包括ForeColor、BackColor、Font、Enabled等。属性和方法的名称是经过精心挑选的,以提高在整个框架和该组控件中的一致性。通过这些组件实现的具有明确类型的对象模型将有助于减少编程错误。
·对浏览器的自动检测:Web控件能够自动检测客户机浏览器的功能,并相应地调整它们所提交的HTML,从而充分发挥浏览器的功能。
·数据绑定:在Web窗体页面中,可以对控件的任何属性进行数据绑定。此外,还有几种Web控件可以用来提交数据源的内容。
在HTML标记中,Web控件会表示为具有命名空间的标记,即带有前缀的标记。前缀用于将标记映射到运行时组件的命名空间。标记的其余部分是运行时类自身的名称。与HTML控件相似,这些标记也必须包含runat="server"属性。下面是一个声明的示例:
<asp:TextBoxID="TextBox1"runat="server"Text="ASP.NET示例">
</asp:TextBox>
其中,"asp"是标记前缀,会映射到System.Web.UI.WebControls命名空间。
2)基本的Web服务器控件
ASP.NET中大致将Web服务器控件分成六大类:标准控件、数据控件、数据源控件、验证控件、导航控件和登录控件。
任何一个应用系统都包括输入、输出和处理部分,而输入和输出对用户来说是接触最多也最为关心的部分。在Web服务器控件中,最基本的两个控件是Label和TextBox,它们完成了文本信息的接收输入和显示输出的工作,而另一个常用控件Button则负责完成与用户的交互,并在事件处理过程中完成系统的处理工作。
(1)
Label控件
Label控件是一个最简单的控件,它主要用来以编程方式显示Web页中的文本。当需要使用程序来改变其显示的文字时,只需要改变它的Text属性即可。
Label控件常用的属性有以下三个:
·Text:指定Label控件显示的文字。
·ForeColor:指定Label控件显示文字的颜色。
·Font:指定Label控件显示文字的字体属性,包括字体名称、大小等。
Label控件的HTML标签:
<asp:LabelID="Label1"runat="server"Text="用户名:">
</asp:Label>
或<asp:LabelID="Label1"runat="server">用户名:</asp:Label>
设置和获取Label控件的Text属性值的方式:
stringusername=Label1.Text; //取值
Label1.Text=username; //设置
(2)
TextBox控件
在交互式网页中,TextBox是最常用的控件之一,用于用户输入文本或编辑文本,并能实现单行、多行、密码的显示格式。常用属性有:
·Text:给出或设置控件中的文本。
·TextMode:给出或设置控件的类型,其中SingleLine为单行文本框,Multiline为多行文本框,Password为密码框,默认值为SingleLine。
·ReadOnly:给出或设置控件内容的只读性。
·Wrap:给出或设置控件内容超过控件宽度时,是否自动换行。
·AutoPostBack:给出或设置当控件失去焦点,且内容已经改变时,是否发回服务器。
·OnTextChanged:指定控件内容发生改变时,所触发的事件名称。
TextBox控件的HTML标签:
<asp:TextBoxID="ContrUserName"runat="server"Width="150px">
</asp:TextBox>
设置和获取名为ContrUserName的TextBox控件的Text属性值的方式:
stringusername=ContrUserName.Text; //取值
ContrUserName.Text=username; //设置
设置ID为ContrUserPwd文本框的密码框的方式:
ContrUserPwd.TextMode="Password";
(3)
CheckBox控件
在日常信息输入中,我们会遇到这样的情况,输入的信息只有两种可能性(如性别为男或女,婚否之类),如果采用文本输入,则一是输入繁琐,二是无法对输入信息的有效性进行控制。这时如果采用复选控件(CheckBox),就会大大减轻数据输入人员的负担,同时输入数据的规范性也得到了保证。其HTML标签如下:
<asp:CheckBoxID="CheckBox1"runat="server"Checked="false"/>
CheckBox的常用属性有:
·Checked:给出或设置控件的选择状态,为True代表选中,为False为未选中。
·AutoPostBack:给出或设置当控件失去焦点,且状态改变时,是否发回服务器。
当CheckBox控件的状态在向服务器发送过程间更改时,将引发CheckedChanged事件。可以为CheckedChanged事件提供事件处理程序,以便在向服务器的各次发送过程中,CheckBox控件的状态发生改变时执行特定的任务。
当创建多个CheckBox控件时,还可以使用CheckBoxList控件。对于使用数据绑定创建一组复选框而言,CheckBoxList控件更易于使用(我们将在后面的章节中为大家介绍),而各个CheckBox控件则可以更好地控制布局。
默认情况下,CheckBox控件在被单击时不会自动向服务器发送窗体。若要启用自动发送,应将AutoPostBack属性设置为true。下例显示了如何使用CheckBox控件。
【例2-2】CheckBox的使用。
设置CheckBox1的AutoPostBack属性为true,并编写CheckBox1的CheckedChanged事件代码如下:
protectedvoidCheckBox1_CheckedChanged(objectsender,EventArgse){
TextBox2.Text=TextBox1.Text;
}
当选中“同联系人”复选框时,运行结果如图2-8所示。
图2-8CheckBox的使用
(4)
Button控件
Button控件允许在Web窗体上创建普通按钮。Button控件的HTML标签如下:
<asp:ButtonID="Button1"runat="server"Text="确定"/>
设置Button控件的Text属性值的方式:
Button1.Text="确定";
当用户单击按钮时触发按钮的Click事件,可以在其事件处理过程中完成页面的提交以及事务处理。
Click事件处理方法:
protectedvoidButton1_Click(objectsender,EventArgse){
//事件处理代码
}
可以为Click事件提供事件处理程序,在事件处理程序中可以通过编程的方式控制单击Button按钮时执行的操作。
添加属性:
privatevoidPage_Load(objectsender,System.EventArgse){
Button1.Attributes.Add("OnClick","javascript:
returnconfirm(′确定吗?′);");
}上述代码在页面装载事件中,给按钮添加了属性。当按钮被单击时,首先弹出一个“确认”对话框供用户选择。对于重要的操作,如保存、删除等,这种友好的提示是必要的。
【例2-3】Button控件的使用,如图2-9所示。
图2-9Button控件的使用实现代码如下:
protectedvoidPage_Load(objectsender,EventArgse){
Button1.Attributes.Add("OnClick","javascript:
returnconfirm('你确定提交吗?')");
}
protectedvoidButton1_Click(objectsender,EventArgse){
Label2.Text="恭喜,你点击了提交按钮!";
}
3)设置控件的Tab键顺序和焦点
若要增强在ASP.NET网页中使用控件的用户体验,可以指定网页中各控件的Tab键顺序。用户通过敲击Tab键,即可按设置的顺序在控件中移动焦点,并可以指定最初打开网页时具有焦点的默认控件,让页面一打开就可以将焦点定位到某一控件上。
(1)
Tab键顺序
在大多数浏览器中,控件的Tab键顺序是按控件在页中添加的顺序来移动的。通过设置控件的TabIndex属性,可以控制其Tab键顺序。例如,在IE中,Tab键的顺序按控件的TabIndex顺序增加,因此,当用户从一个TabIndex属性为2的控件移出时,焦点将自动定位到TabIndex值为3(或更大)的控件上。
(2)焦点
在浏览器中打开网页时,由浏览器确定网页中哪个控件应具有焦点。一般来说,浏览器最初将焦点定位在浏览器窗口本身或该页的第一个控件上。如果要使某个特定控件获得焦点,则可以通过服务器代码设置默认焦点,具体可以通过以下三种方式。
①调用该控件的Focus方法:
protectedvoidPage_Load(objectsender,EventArgse){
TextBox1.Focus();
}
上述代码通过在Page_Load事件中调用控件TextBox1的方法Focus,将默认焦点设置在TextBox1控件上。
②调用页的SetFocus方法:
protectedvoidPage_Load(objectsender,EventArgse){
this.SetFocus("TextBox1");
}
上述代码通过调用页面的SetFocus方法,将要设置默认焦点的TextBox1控件的ID赋给方法,从而将默认焦点设置在该控件上。③在窗体或面板中设置默认焦点:
<formid="form1"runat="server"defaultfocus="TextBox1">
<div>
<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>
<asp:ButtonID="Button1"runat="server"Text="Button"/>
</div>
</form>上述代码通过调用设置form元素的属性defaultfocus,为要获得默认焦点的控件的ID值设置默认焦点。
知识3Response对象和Request对象
Web应用开发中很重要的一个问题就是在Web页面之间的信息传递和状态维护。ASP.NET提供了一些内置对象,如Response、Request、Session、Application、Server对象等,以帮助Web开发人员来管理Web页面间的状态,从而实现特定的功能。考虑任务二实现的需要,我们先讨论Response对象和Request对象。
1.Response对象
Response对象用于输出数据到客户端,包括向浏览器输出数据、重定向浏览器到另一个URL或者停止输出数据。Response对象是属于Page对象的成员,不用声明便可以直接使用,其对应HttpResponse类,命名空间为System.Web。
1)向浏览器输出数据
在Web开发中使用最频繁的语句是显示文本。Response对象提供了Write方法来完成这一功能。如:
Response.Write("这是向浏览器输出的字符串");
除了可以将指定的字符串输出到客户端浏览器,也可以把HTML标记输出到客户端浏览器。
Response.Write("<h2>软件技术</h2>");
上面的HTML标签<h2>和</h2>将与文本一起被发送到客户端,客户端浏览器会识别这些HTML标记并在Web页再显示为正确的形式。
使用Write方法还可以输出JavaScript脚本,客户端浏览器会识别并执行这些脚本程序。例如:
Response.Write("<scriptlanguage=\"javascript\">
alert('欢迎使用ASP.NET')</script>");
上面的代码是向客户端输出一段JavaScript脚本代码,实现在客户端弹出一个信息提示框的功能,如图2-10所示。
图2-10Response对象的使用
2)页面重定向
利用Response.Redirect方法可以实现页面重定向,可以由一个页面地址转到另一个页面地址或URL地址。下面的代码表示从当前页转到名为Test.aspx的页面。
Response.Redirect("Test.aspx");
通常,从一个页面跳转至另一个页面时,还需要传递一些信息,Response.Redirect方法在页面跳转时,可以向另一个页面传递一些参数,如:
Response.Redirect("Test.aspx?uid=Zhangsan");
上述代码在完成向Test.aspx定向时,将参数uid及其对应的值也传递给Test.aspx页。
3)停止输出
当ASP.NET文件执行时,如果遇到Response.End方法,就自动停止输出数据,如:
for(inti=1;i<=7;i++){
if(i==6){
Response.Write("快乐周末!")
Response.End();
}
Response.Write(i);
}
上述代码输出为:12345快乐周末!。
2.Request对象
Request对象的主要功能是从客户端得到数据。通过使用Request对象,可以访问基于表单的数据和通过URL发送的参数列表信息,而且还可以接收来自用户Cookie的信息。Request对象是属于Page对象的成员,不用声明便可以直接使用,其对应HttpRequest类,命名空间为System.Web。
1)获取页面传递的数据
在页面中设置传递的数据:
Response.Redirect("Test.aspx?uid=Zhangsan");
获取传递的数据:
stringuid=Request["uid"].ToString();
2)获取URL信息
获取站点根目录:Request.Url.Host。
获取应用程序目录:Request.ApplicationPath。
获取物理文件系统路径:Request.PhysicalApplicationPath。
3)得到客户端的信息
利用Request对象内置的属性可以得到一些客户端的信息。
客户端浏览器版本:Request.UserAgent。
客户端IP地址:Request.UserHostAddress。
【例2-4】Request对象的使用,如图2-11所示。
获取客户端浏览器版本信息的代码如下:
protectedvoidButton1_Click(objectsender,EventArgse)
{
Label2.Text=Request.UserAgent.ToString();
}
获取客户端的IP地址的代码如下:
protectedvoidButton2_Click(objectsender,EventArgse)
{
Label2.Text=Request.UserHostAddress.ToString();
}
图2-11Request对象的使用传递参数的代码如下:
protectedvoidButton3_Click(objectsender,EventArgse)
{
stringuserText="张三";
Response.Redirect("Test.aspx?uid="+userText);
}
在Test.aspx页中获取传递的参数,值得注意的是获取传递参数时,需要判断参数值是否为空:
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Request["uid"]!=null)
{
Response.Write("<br>"+Request["uid"].ToString()+",欢迎你!");
}
}
任务实现
步骤1新建名为Login.aspx的页面,在其中添加Label控件、TextBox控件和Button控件,并按表2-5设置各控件相应的属性表2-5界面控件设置
图2-12登录界面设计步骤2双击“确定”按钮,为btnConfirm控件添加事件处理程序:
protectedvoidbtnConfirm_Click(objectsender,EventArgse){
stringuserName=txtUserName.Text;
stringuserPwd=txtUserPwd.Text;
Response.Redirect("LoginSuccess.aspx?name="+userName+"&pwd="+userPwd);
}步骤3新建名为LoginSuccess.aspx的页面,并添加如下代码:
protectedvoidPage_Load(objectsender,EventArgse){
if(Request["name"]!=null&&Request["pwd"]!=null){
Response.Write("<br/>"+Request["name"].ToString()
+",欢迎你进入校园在线超市");
Response.Write("<br/>"+"您的登录密码为:"
+Request["pwd"].ToString());
}else{
Response.Write("对不起,输入有误!");
}
}
步骤4在浏览器中查看运行结果,如图2-13所示。
图2-13LoginSuccess.aspx页显示结果
任务描述
在校园在线超市系统中,为会员登录提供登录密码的保存功能。如果会员用户名和密码均为“guest”的用户登录时,则选中“2周内不用再登录”复选框,登录后会保存用户名和密码。当用户在有效的时间内再次打开登录窗口时,可以直接登录。2.3【任务3】会员登录状态管理
必备知识
知识1状态管理
Web应用本质是无状态的,对页面的每个请求均被视为新请求,且默认情况下,来自一个请求的信息对下一个请求不可用,而在实际企业应用中,完成一个业务往往需要经过多个步骤。例如,在校园在线超市订购商品,首先需要找到想要的商品,将它添加到购物车中,然后继续浏览商品,直到选购完所有商品后,才提交购物车,完成订单。既然Web应用是无状态的,那么它是如何来维护订购商品过程中的信息的呢?
ASP.NET提供了在服务器上保存页面之间信息的状态管理,这有助于在访问Web站点的过程中,保持用户信息(状态)的连续性。如果能够在页面之间保留状态,那么用户初始提供的信息就可以重用。因此,每次将页面发送回服务器时,用户就不需要多次输入相同的信息了。这就需要通过保存应用程序的信息来维护不同发送过程中的数据,称为应用程序的状态管理,也称之为状态维护。
状态管理是对同一页或不同页的多个请求维护其状态和页信息的过程。在ASP.NET2.0中提供了多种技术在服务器往返过程之间维护状态,一般包括服务器端和客户端维护技术。选择哪种类型的状态管理取决于应用程序的性质。
1.服务器端状态管理
服务器端状态管理使用服务器资源来存储状态信息,这类选项的安全性较高。
1)应用程序状态
应用程序状态是一种全局存储机制,可从Web应用程序中的所有页面访问。例如,存储Web应用程序的访问人数。保存应用程序状态使用Application对象,如Application["visitors"],这种保存应用程序状态的变量称为应用程序变量。
2)会话状态
会话状态信息仅供Web应用程序的某个特定会话的用户使用。例如,存储某个用户的订单编号,存储登录用户的登录信息等。会话状态是HttpSessionState类的实例,通过Page等类的Session属性公开,如Session["OrderNumber"]。
3)
Cache对象
在应用程序级可使用Cache对象来管理状态。
以上服务器状态管理将在后续章节中详细讲解。
2.客户端状态管理
客户端状态管理涉及在页中或客户端计算机上存储信息,在各往返行程间不会在服务器上维护任何信息。客户端状态管理往往具有最低的安全性,但其具有服务器性能,因为对服务器资源的要求是适度的。它提供可供维护状态的各个选项。
1)
Cookie
Cookie是一个文本文件,用来存储保留状态所需的少量文本信息。
2)
视图状态
视图状态是ASP.NET页框架默认情况下,用于保存往返过程之间的页和控件值的方法。它通过Page类的ViewState属性公开。ViewState属性被作为页的隐藏域进行维护。
可以使用视图状态存储特定值,如将“HelloWorld”存储在视图状态中,代码如下:
ViewState["view"]="HelloWorld";读取视图状态的代码如下:
stringstr=(string)ViewState["view"];
可以通过设置@Page指令或Page的EnableViewState属性指示当前页请求结束时,该页是否保持其视图状态以及它包含的任何服务器控件的视图状态。代码如下:
<%@PageEnableViewState="false"%>
该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025工业用地转让合同范本
- 矿物加工厂突发事件应急预案考核试卷
- 稀有稀土金属加工中的市场动态监测与企业战略调整考核试卷
- 时光机初二语文作文
- 碳酸饮料市场渠道拓展考核试卷
- 描写父亲的初三语文作文
- 篷布循环经济探讨考核试卷
- 矿物加工厂清洁生产与循环经济考核试卷
- 纸张加工中的表面压纹技术考核试卷
- 九级语文上册第六单元提高练习5课人教新课标版
- CJJT191-2012 浮置板轨道技术规范
- 2024年同等学力申硕-同等学力(法学)笔试参考题库含答案
- 部编版二年级语文下册第一单元大单元整体作业设计
- 黑臭水系治理工程监理大纲
- 二年级下册递等式计算练习400题及答案
- 高三下学期综评自我陈述报告
- 国际人权法与非洲人权体系的重要案例研究
- 国有土地使用权的评估与出让管理
- 2023年标准化工程师考试真题模拟汇编(共402题)
- 中建悬挑卸料平台专项施工方案
- 中建总工程师的职业基本素养
评论
0/150
提交评论