您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14096|回复: 68

《ASP.Net 中文手册》

[复制链接]

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:08:00 |显示全部楼层
程序员装备

前言  <br>本站的又一力作《asp.net 手册》现已成功推出,供广大有志于ASP.Net开发创作的同志学习使用。 <br>金桥网络信息服务网(Http://www.gbnis.com) <br>2002.1.23 <br><br>第一篇 概论<br><br>第一章 微软.NET战略和ASP.NET简介<br>第二章 .NET的安装与运行环境<br><br>第二篇 Web Form<br><br>第一章 Web Form简介(上)<br>第一章 Web Form简介(下)<br>第二章 服务器端控件(上)<br>第二章 服务器端控件(下)<br>第三章 自定义控件<br>第四章 HTML控件<br><br>第三篇 ADO.NET数据库编程<br><br>第一章 ADO.NET简介<br>第二章 访问数据库<br>第三章 ADO.NET数据连接方法<br>第四章 ADO.NET数据库基本操作<br>第五章 Dataset的用法<br>第六章 数据绑定<br><br>第四篇 应用程序<br><br>第一章 什么是应用程序<br>第二章 配置Config.web<br>第三章 编写global.asax<br>第四章 Application和Session<br>第五章 安全访问控制<br>第六章 会员系统例子<br><br>第五篇 Web Service<br><br>第一章 Web service简介<br>第二章 一个简单的Web Service案例<br>第三章 数据交换<br>第四章 存取站点对象<br><br>第六篇 性能优化<br><br>第七篇 高级应用<br><br>第一章 XML及其应用<br>第二章 三层结构及其应用<br>第三章 使用MSMQ<br><br>制作者:Gbnis <br><br>--------------------------------------------------------------------------------<br> <br>修改、传播 请保留本信息 <br>

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:17:00 |显示全部楼层

回复

[vscript]第一章 微软.NET战略和ASP.NET简介<br><br>欢迎你阅读《ASP.NET完全入门》,通过对本书的阅读,我们相信你能够对ASP.NET会有更深入的了解。<br>ASP.NET又叫ASP+,但并不仅仅是ASP的简单升级,而是MicroSoft推出的新一代Active Server Pages脚本语言。ASP.NET是微软发展的新型体系结构.NET的一部分,它的全新技术架构会让每一个人的网络生活都变得更简单。<br>首先需要特别指出的是,ASP.NET不仅仅只是有了一个新界面并且修复了一些缺陷的ASP3.0的升级版本(即不同于ASP2.0升级到ASP3.0的转变)。更为重要的是,ASP.NET吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。<br>要了解ASP.NET的真实面目,我们首先就得了解一下微软.NET战略。<br><br>1.1.1 微软.NET的历史<br><br>随着网络经济的到来,微软公司希望帮助用户,能够在任何时候、任何地方、利用任何工具都可以获得网络上的信息,并享受网络通信所带来的快乐。.NET战略就是为着实现这样的目标而设立的。<br>微软公开宣布,今后将着重于网络服务和网络资源共享的开发工作,并称,将会为公众提供更加丰富、有用的网络资源与服务。<br>微软新一代平台的正式名称叫做&quot;新一代Windows服务&quot;(NGWS),现在微软已经给这个平台注册了正式的商标--MicroSoft.Net。在.Net环境中,微软不仅仅是平台和产品的开发者,并且还将作为架构服务提供商、应用程序提供商,开展全方位的Internet服务。在谈及这个平台中使用的新技术,微软透露,它将在.Net环境中提供更多新产品和一揽子的全套服务。<br><br>MicroSoft .NET平台的基本思想是:<br>侧重点从连接到互联网的单一网站或设备上,转移到计算机、设备和服务群组上,使其通力合作,提供更广泛更丰富的解决方案。用户将能够控制信息的传送方式、时间和内容。计算机、设备和服务将能够相辅相成,从而提供丰富的服务,而不是像孤岛那样,由用户提供唯一的集成。企业可以提供一种方式,允许用户将它们的产品和服务无缝地嵌入自己的电子构架中。这种思路将扩展二十世纪八十年代首先由PC赋予的个人权限。<br><br>MicroSoft .NET将开创互联网的新局面,基于HTML的显示信息将通过可编程的基于XML的信息得到增强。XML是经&quot;万维网联盟&quot;定义的受到广泛支持的行业标准,Web浏览器标准也是由该组织创建的。微软公司为开发它投入了大量精力,但它并不是MicroSoft的专有技术。XML提供了一种从数据的演示视图分离出实际数据的方式。这是新一代互联网的关键,提供了开启信息的方式,以便对信息进行组织、编程和编辑;可以更有效地将数据分布到不同的数字设备;允许各站点进行合作,提供一组可以相互作用的&quot;Web服务&quot;。<br><br>1.1.2 微软.NET的介绍<br><br>1.1.2.1 MicroSoft .NET综述<br>MicroSoft .NET平台包括用于创建和操作新一代服务的.NET基础结构和工具;可以启用大量客户机的.NET User Experience;用于建立新一代高度分布式的数以百万计的.NET积木式组件服务;以及用于启用新一代智能互联网设备的.NET设备软件。<br>MicroSoft .NET产品和服务-包括Windows.NET,连同建立积木式服务的核心集成套件;MSNTM .NET;个人订购服务;Office.NET;Visual Studio .NET;以及用于.NET的bCentralTM。<br><br>.Net环境中的突破性改进在于:<br><br>1. 使用统一的Internet标准(如XML)将不同的系统对接;<br><br>2. 这是Internet上首个大规模的高度分布式应用服务架构;<br><br>3.使用了一个名为&quot;联盟&quot;的管理程序,这个程序能全面管理平台中运行的服务程序,并且为它们提供强大的安全保护后台;<br><br>.NET平台包括如下组件:<br><br>1.用户数据访问技术。其中包括一个新的基于XML的、以浏览器为组件的混合信息 架构,叫做&quot;通用画板&quot;;<br><br>2.基于Windows DNA 2000的构建和开发工具;<br><br>3.一系列模块化的服务,其中包括认证、信息传递、存储、搜索和软件送递功能;<br><br>4.一系列驱动客户设备的软件;<br><br><br>1.1.2.2 Microsoft.NET平台带来的重要意义<br><br>我们来看一下MicroSoft .NET对开发人员、IT专业人员、以及企业应用的巨大意义。<br>对于开发人员MicroSoft .NET的策略是将互联网本身作为构建新一代操作系统的基础,对互联网和操作系统的设计思想进行合理延伸。这样,开发人员必将创建出摆脱设备硬件束缚的应用程序,以便轻松实现互联网连接。MicroSoft .NET无疑是当今计算机技术通向计算时代的一个非常重要的里程碑。 <br><br>NET的核心组件有:  <br><br> 一组用于创建互联网操作系统的构建块,其中包括Passport.NET(用于用户认证)以及用于文件存储的服务、用户首选项管理、日历管理以及众多的其它任务  <br><br>构建和管理新一代服务的基本结构和工具,包括Visual Studio.NET、.NET企业服务器、.NET框架和Windows.NET  <br><br>能够启用新型智能互联网设备的.NET设备软件  <br><br> .NET用户体验  <br><br>.NET对最终用户来说非常重要,因为计算机的功能将会得到大幅度提升,同时计算机操作也会变得非常简单。特别地,用户将完全摆脱人为的硬件束缚:用户可以自由冲浪于互联网的多维时空,而不是束缚在便携式电脑的方寸空间--可通过任何桌面系统、任何便携式电脑、任何移动电话或PDA进行访问,并可对其进行跨应用程序的集成。  <br><br>.NET可使用户轻松进行互联网连接,并轻松完成那些在当今看来十分费时而且费力的事务,它们往往要求用户进行数据重输入并需运行几个小时才能完成。通过将多项安全数据流合并到单一的用户界面(或者甚至是可编程决策引擎),.NET架构将用户从充斥于当今Web的数据竖井的束缚中解脱出来。用户可以自由访问、自由查看、自由使用他们的数据。  <br><br>.NET对开发人员来说也十分重要,因为它不但会改变开发人员的开发应用程序的方式,而且使得开发人员能创建出全新的各种应用程序。新型开发范例的核心是Web服务这个概念的引入。Web服务是一种通过简单对象访问协议(SOAP),在互联网上展露其功能性的、极为公开的服务。SOAP是一种基于可扩展标记语言(XML)制定的协议。  <br><br>在过去,开发人员通过集成本地系统服务来构建应用程序。在这种模型下,开发人员可以访问丰富的开发资源并能严格控制应用程序的行为。  <br><br>如今,开发人员已在很大程度上挣脱了这种模型的束缚,致力于构建具有复杂结构的n层化系统,这种系统能将网络上众多的应用程序一并进行集成,大大提升了应用程序的价值。这样,开发人员便可把精力集中在充分挖掘软件独特的商业价值,而不是构建基本结构上。可喜的局面将应运而生:软件投放市场的时间大大缩短、开发人员的编程效率明显提高,最终把质量上乘的软件呈现给用户。 <br><br>我们正在进入一个崭新的计算时代--一个由互联网(尤其是Internet核心技术XML)实现的时代。利用XML,能够创建出可供任何人从任何地方使用的、功能非常强大的应用程序。它极大地拓展了应用程序的功能,并实现了软件的动态提供。在这种情况下,软件已不完全指那些从光盘进行安装的程序,而是演变成了一种服务--类似于ID调用程序或按收看次数进行收费的电视--人们可通过通信媒体订购的服务。 <br><br>n层计算技术具有能够大幅度提高生产力、紧密耦合的特点,而Web概念具有面向消息、松散耦合的特点,我们将二者有机地糅合在一起,实现了上述构想。我们将这种计算风格称为Web服务,它的出现标志着人类已经迈入应用程序开发技术的新纪元。Web服务是一种应用程序,它可以通过编程并使用标准的Internet协议,像超文本传输协议(HTTP)和XML,将功能展示在互联网和企业内部网上。还可将Web服务视作Web上的组件编程。  <br><br>从理论上讲,开发人员可通过调用Web应用编程接口(API),将Web服务集成到应用程序中。其调用方法与调用本地服务类似,不同的是Web API调用可通过互联网发送给位于远程系统中的某一服务。例如,MicroSoft Passport(Passport)服务使得开发人员能够对应用程序进行认证。通过对Passport服务编程,开发人员可以充分利用Passport的基本结构,通过运行Passport来维护用户数据库,以确保其正常运行、定期备份等等。 <br>.NET正是根据这种Web服务原则而创建的,微软目前正着手提供这个基本结构,以便通过.NET平台的每一部分来实现这种新型的Web服务。而Visual Studio.NET、.NET框架、Windows.NET和.NET企业服务器,正是为进行基于Web服务模型的应用程序开发而度身定做的新一代开发工具和基本结构。.NET构建块服务、新增的.NET设备支持以及即将到来的.NET用户体验,将为人们彻底攻克这一难题划上一个圆满的句号,使人们能够充分利用Web服务模型,如愿以偿地开发出新一代应用程序。 <br><br> .NET对IT专业人员的重要意义<br>目前,IT专业人员能够利用与构建.NET平台相同的技术。 <br><br>.NET Enterprise Servers和Windows 2000操作系统,为创建具有高度可管理性的、能迅速投入市场的应用程序提供了坚实基础。它们利用的是可扩展标记语言(XML),因此随着Web体系结构的革新,在此平台上创建的程序依然很有价值。 <br><br>.NET平台的核心是,采用有效的、分门别类的方式来构建应用程序,达到其前所未有的规模。该平台上的Web服务模型指的是:企业应用程序的中心业务要素通常由本地管理,而支持它们的服务(如用户认证、文件存储、用户首选项管理、日历、邮件等等)却无须本地管理,可以被无缝订购。为了存储用户文件和邮件,IT专业人员往往在服务器上安装新的独立磁盘冗余阵列(RAID阵列),而有了.NET,他们在这一方面将会花费较少的精力,而更多地致力于怎样为公司增加效益。 <br><br>该Web服务模型还将动态配置新软件的发布和更新。用户将以极其紧密的连接方式工作,因此更易于管理。而简化的管理又可使IT专业人员更能适应变幻莫测的业务需求。 <br><br>开发应用程序的.NET Web服务模型将为企业应用程序的创建开辟一条新路。通过企
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:24:00 |显示全部楼层

回复

[vscript]1.1.2.3 MicroSoft .NET 的基本模块<br><br>网络服务一览<br><br>通常说来,一个网络服务只是一个作为服务――通过Internet标准此服务能与其它网络服务集成在一起――发行的简单的应用程序。换句话说,它是可通过URL定位的自动将信息返回到需要它的客户端那里的一种资源。网络服务一个重要的特点是客户不需要知道一种服务是怎样实现的。在本节中,我将向你解释网络及网络服务如何把基于组件技术的最好的方面结合在一起的,并且介绍与网络服务通信所需的基本框架。<br>同组件一样,网络服务提供&quot;黑匣子&quot;函数,它可以被再次作用而不用关心此服务是怎样实现的。网络服务提供被称为契约的精确定义的接口,此接口描绘了所提供的服务。开发人员可以将远程服务、本地服务和定置代码组合在一起而集成应用程序。例如,某公司可以使用如下服务组建一在线商店:微软护照(原文:Passport)服务以验证用户身份,第三方个人化服务以使网页匹配每一个用户的参数,信用卡处理服务,销售税服务,对每个运输公司的包裹跟踪服务,链接公司内部库存管理程序的内部目录服务,以及少量定置代码以使他们的商店能脱颖而出。 <br><br>然而,网络服务与现在的组件技术不同,它不使用需要在服务器和客户机有明确的、同类型基本构架的具体的对象模型协议,例如DCOM、 RMI或 IIOP 。尽管与具体组件技术紧密结合的实现在一个受控的环境中能很好地被接受,但它们在网络环境中变得不切实际。因为一个集成商业程序的参与者会发生变化,随着时间的推移,技术也在变化,所以在所有参与者间确保一个单一的、统一的体系架构就变得十分困难。网络服务采取了另外一种途径,它使用普便存在的网络协议和数据格式,如HTTP和XML,进行通信。支持这些网络标准的任何系统都支持网络服务。 <br><br>而且,网络服务契约描述的是以术语报文形式提供的服务,这些服务是由网络服务生成和接受的,而不是描述服务是如何实现的。通过把重点放在报文上,网络服务模板就完全对语言、平台和对象模板一无所知。 用任何一套编程语言、对象模型和平台的完全特性集,都可实现网络服务。网络 服务可在任何平台被用任何语言所实现的应用程序使用。只要用于解释服务容量、报文序列和所期望协议的契约得到认同,那么所实现的网络服务及网络服务用户就可相互不同,而不会影响会话另一端的应用程序。 <br><br>网络服务模板对最小体系架构的要求很低,以确保网络服务在使用任何技术和编程语言的平台上实现和访问。对网络服务互用性的解决可只依靠网络标准。然而,为了使应用程序更容易使用网络服务,简单地同意通过标准网络协议就可以访问网络服务是不够的。当网络服务和网络服使用者依靠标准的方式表示数据和命令、表示网络服务契约 、算出网络服务所提供的容量时,网络服务才容易使用。 <br><br>XML是定义一个标准的、可扩展的用于提供命令和典型数据的语言明显的一种选择。虽然为表示命令和典型数据可以定义使用其它技巧(比如编码为一种查询字符串)的规则,但XML被专门设计为描述数据的标准元语言。简单对象存取协议(SOAP)是以一种可扩展的方式使用XML表示数据和命令的工业标准。网络服务可选择用SOAP决定报文的格式。 <br><br>XML是网络服务契约的一种使能技术。服务契约语言 (SCL)是记录网络服务契约的XML语法。由于SCL是基于XML的,所以对开发者和开发工具来说,容易生成、解释契约。关于SCL细则的草案很快会出台(注意:现在的SOAP Toolkit for Visual Studio 6.0支持称为SDL的SCL的早期版本)。 <br><br>Disco 规范为服务提供者发布网络 服务契约和相应的机制描述了一个标准方式,这将使开发者或开发工具可找到契约文献。当你读到这里时, Disco规范的草案应出台了。 <br><br>象SOAP, SCL和Disco这样的标准有助于开发者,因为它们不需要明白和实现所使用的每一个网络服务的访问方式。支持这些标准的更好的、已充分测试的、高性能的体系架构将由开发平台提供,这会大大简化整个开发过程。<br><br>MicroSoft .NET Framework<br><br>MicroSoft .NET框架的目的是使你更容易建立网络应用程序和网络服务。图2 显示了MicroSoft .NET框架的体系。建立在操作系统最上层的服务,是管理运行时代码需求的common language runtime,这些代码可以用任何现代编程语言所写。Runtime提供了许多服务,这些服务有助于简化代码开发和应用程序的开发同时也将提高应用程序的可靠性。.NET Framework包括一套可被开发者用于任何编程语言的类库。在此之上是许多应用程序模板,这些模板特定地为开发网络站点和网络服务提供高级组件和服务。<br><br>Common Language Runtime<br><br>运行语言(runtime)调入并运行用任何运行感知编程语言所写的代码。以运行为目标的代码被称为受控(managed )代码,受控代码代码只是意味着在内部可执行代码与运行自身间存在已定义好的合作契约。对于象生成对象、调用方法等这样的任务,被委托给了运行语言,这使得在运行语言能为可执行代码增加额外的服务。 <br><br>运行语言以交叉语言集成、自描述组件、简单配制和版本化及集成安全服务为特点。 <br><br>运行语言使用一种新的能表达大部分现代编程语言语义的通用类型系统,通用类型系统定义了一套标准类型及生成新标准的规则。运行语言知道怎样生成、执行这些类型。编译器和解释器使用运行语言服务定义类型、管理对象、进行方法调用,而不是使用工具或特定于语言的方法。  <br><br>类型系统的主要设计目的是使多种语言能深度集成。用一种语言所写的代码能继承用另一种语言所写的类的实现,用一种语言所写的代码抛出的异常能被用另一种语言写的代码捕获,象调试和剖析之类的操作会在完全封闭下工作,而不用考虑代码所用的语言。这就意味着编写可重用类库的开发者,不再需要为每一种编程语言或编译器生成一个版本,并且使用类库的开发者不再受到为他们使用的编程语言开发的库的限制。 <br><br>自描述组件――现在MicroSoft .NET框架上已成为可能――简化了开发和配制,并提高了系统的可靠性。许多由运行语言提供的服务是由元数据及用于补充可执行代码的信息所驱动。因为所有的信息都储存在一起,只有可执行的(代码)才被称为自描述组件。 <br><br>自描述组件的一个主要优点是,使用它们并不需要其它文件。类的定义不需要单独的头文件;通过检查元数据对类的定义可以从组件自身获得。跨语言或过程边界访问组件并不需要各自的IDL文件、类型文件或proxy/stubs;所必需的信息已存在于元数据之中。为识别开发者请示的服务属性,并不需要展开各自的配制信息。 最主要的是,由于元数据是在编译过程中由源代码生成,并与可执行代码储存在一起,它将永远和可执行部分同步。 <br><br>除了改善对单个组件的配制,Microsft .NET框架定义了一个应用程序配制模板,以解决定置应用程序安装和DLL版本化(通常被称为&quot;DLL Hell&quot;)这一复杂过程的问题,运行语言提供了支持这个模板的服务。<br>Microsft .NET框架 引入了组合体的概念。一个组合体是一组资源和类型,并包括有关这些资源和类型的元数据,也就是被作为一个单元配制的。元数据被称为组合体的名单,它包含象类型和资源表之类能被组合体外看得见的信息,这个名单也包括有关从属关系之类的信息,例如组合体建立时的版本号。开发人员可以指定版本策略,以指示运行语言是否装入系统上已安装的依赖于组合体的最新版本,装入一指定版本,或在编译时使用的版本。 <br><br>某软件组件的多个拷贝总可以存在于同样的操作系统上,然而,通常说来,只有其中的一个拷贝能被操作系统注册、调入内存、执行。对系统来说,定位和调入内存的策略是全局性。.NET Framework Common Language Runtime 增加了所必须的体系架构以支持管理组件定位和调入的每个应用程序策略,这通常被称为并行配制。 <br><br>组合体可以被一个应用程序私有,或被多个应用程序共享。一个组合体的多个版本可以同时配制在同一台机器上。应用程序配制信息定义了到何处去查找组合体,这样runtime就能为同时运行的两个不同的应用程序装入同一组合体的不同版本。这就消除了由组件版本的不兼容性引起的问题,提高了系统整体的稳定性。如果必要,如果必要,管理员可以为配制时刻的组合体增加配制信息,例如一个不同的版本策略,但是编译时提供的原始信息永远不会丢失。 <br><br>因为组合体是自描述的,所以并不需要在系统上进行显式注册。应用程序的配制简单到只需将文件拷贝到目录中既可(如果为了使应用程序能够运行,必须安装未经组织过的组件的话,情况会稍微复杂一点)。配制信息保存在可被任何文本编辑器编辑的XML文件中。 <br><br>最后,运行语言也提供完整的、普遍深入的安全服务,以确保未经授权的用户不能访问机器上的资源,并且代码不会执行未经允许的动作。这就提高了系统整体的安全性可靠性。 由于运行语言用于装入代码、生成对象、执行方法调用,所以当受控代码装入内存、执行时,运行语言能进行安全检查,强化安全策略。<br>Microsft .NET框架不仅规定代码访问安全,还规定基于角色的安全。通过代码访问安全机制,开发人员能为应用程序指定完成工作所必需的权限。例如,代码或许需要写文件或访问环境变量的权力。这类信息和有关代码标志的信息一起存储在配制级上的。当代码装入内存及执行方法调用时,运行语言验证是否能给予代码所要求的权限。如果不能,将记录一条安全冲突信息。给予权限的策略,这被称为信任策略,是由系统管理员建立的,并且是建立在关于代码的证据基础之上,比如:代码是谁发布的,是从什么地方获得的,以及在组合体中找到的代码标志和它要求的权限。开发人员可以指定他们显然不需要的权限,以防止其它人恶意使用他们的代码。如果所需要的权限依赖直到运行时刻才会知道的信息,那么就可写入纲邻性的安全检查。<br>除了代码访问安全,运行语言还支持基于角色的安全。基于角色的安全建立同代码访问安全一样的权限模板,只是这些权限是建立在用户的身份
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:30:00 |显示全部楼层

回复

[vscript]ASP.NET 网络 服务<br><br>ASP.NET 网络 服务体系架构为用ASP.NET建立网络 服务提供了一高级可编程模板。虽然建立网络服务并不需要使用网络 服务平台,但是它提供许多的优点将简化开发过程,并且它使用的编程模型对用ASP或VB工作的开发人员来说是很熟悉的。使用这个可编程模型,开发人员不需要理解HTTP、SOAP或其它任何网络服务规范。 <br><br>开发人员用ASP.NET生成一个扩展名为.asmx的文件,并把此文件配制为网络应用程序的一部分,就建立起了一个网络 服务。ASMX文件或者包含对在其它地方定义的受控类的引用,或者包含这个类的定义。这个类是由ASP.NET提供的WebService类所派生。公有的类方法在标记上WebMethod属性后,就会成为网络服务方法,把HTTP请求发送到ASMX文件中的URL后,这些方法就会被调用。你不必手工为你的网络服务建立一个契约。当被调用者请求时,ASP.NET检查类的元数据,以自动生成SCL文件。 <br><br>客户可通过SOAP,HTTP GET 和HTTP POST提交请求。对方法和参数进行编码的约定是:对HTTP GET,将被编码为查询字符串;对HTTP POST,将被编码为表单数据。HTTP GET 和HTTP POST 的机制不如SOAP有力,但是它们使得客户在访问网络服务时不必支持SOAP。 <br><br>ASP.NET 网络服务模型假定了一个无状态服务结构。无状态结构通常比有状态结构更具可扩展性。每次收到一个服务请求后,就生成一个新对象,请求被转化为一个方法调用,当方法调用返回时对象被销毁。如果这些服务需要跨请求维护状态,那么它们将使用ASP.NET状态管理服务。基于ASP.NET的网络服务在网络应用程序模型中运行,因此它们得到了该模型的所有安全、配制和其它优点。 <br><br>ASP.NET 网络服务还提供了一个为在SCL文件中描述的网络服务生成分类的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控类中的方法。代理对应用程序代码隐藏了所有的网络和引导设备,因此使用网络服务看起来就象使用其它受控代码一样。代理将优先使用SOAP链接网络服务,但是它同样支持HTTP GET和 HTTP POST机制。因此HTTP GET和 HTTP POST同样也能被使用。 <br><br>网络服务为在Internet上绑定应用程序提供了一个利用现存体系架构和应用程序的简单的、灵活的、基于许多标准的模型。网络应用程序很容易与当地开发的服务或已存在的服务集成在一起,而不用考虑开发平台、开发语言或使用的对象模型,以用于实现任何组成的服务或应用程序。 <br><br>Microsft .NET框架在现有开发人员技巧之上,提供了一个应用程序模板和关键技术,用于简化安全、可靠、可扩展、高可用性的网络服务的建立、部署和不断的发展。 <br><br>通过上面的介绍,我们能够感觉到MicroSoft .NET对于我们今后的程序设计将产生巨大的影响。 <br><br>1.1.3 ASP.NET历史 <br><br>我们在讲述ASP.NET历史之前,让我们来回顾一下ASP。 <br><br>ASP的第一个版本是0.9测试版。它给WEB开发带来一阵暴风,它能够将代码直接嵌入HTML,使得设计WEB页面变得更简单,更强大,并且通过内置的组件能够实现强大功能,最明显的就是ActiveX Data Objects (ADO),它使得建立一个动态页面如小孩子玩游戏一样简单。 <br><br>最终出场的是Active Server Page 1.0,它做为IIS的附属产品免费发送。并且不久就在Windows平台上广泛使用。ASP与ADO的结合使用开发者很容易地在一个数据库中建立和打开一个记录集。这不无疑是它如此快就被大众接受的因素,因为你现在能使用这些脚本建立和打开一个记录集,处理和输出任何数据,以任何顺序,几乎只要你能想到的,它就能完成。  <br><br>1998年,微软公司又发布了ASP 2.0 。ASP 1.0和ASP 2.0主要区别是外部的组件需要实例化。有了ASP 2.0 和IIS 4.0,我们就有可能建立ASP应用了,而且每个组件就有了自已单独的内存空间。内置的MicroSoft Transaction Server(MTS)也使用制做组件便得简单。 <br><br>微软公司接着开发了Windows 2000操作系统。 这个Windows版本给我们带上了IIS 5.0 以及 ASP 3.0。此次并不是简单对ASP进行补充,核心的不同实际上是把很多的事情交给了COM来做。在windows 2000中,微软结合了MTS与COM核心环境做出了COM+,这就让主机有了一种新的方法来使用组件,同样给主机带来了更多的稳定性,成了一个可以升级的效率高的工作平台。IIS 5.0在表面上似乎没有改什么,但是在接口上动的手术比较大。在内部,它使用COM+ 组件服务来对组件提供一个更好的执行的环境。 <br><br>有了这些,微软公司推出了ASP.NET,ASP.NET又叫ASP.NET,他不是ASP的简单升级,而是MicroSoft推出的新一代Active Server Pages。ASP.NET是微软发展的新的体系结.NET的一部分,其中全新的技术架构会让每个人的编程生活变得更的简单<br><br><br>1.1.4小结<br>在本章中,我们介绍了微软.NET的历史,以及对.NET的构成、性能进行了一个详细的介绍,同时,我们还详细介绍了ASP.NET的历史。在下面的章节中,我们将按实例一步一步的讲解ASP.NET。<br><br><br>制作者:Gbnis <br><br>--------------------------------------------------------------------------------<br> <br>修改、传播 请保留本信息 <br>[/vscript]<br>中文123456
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:36:00 |显示全部楼层

回复

[vscript]第二章 .NET的安装与运行环境<br><br>1.2.1 运行环境配置<br>ASP.NET的调试环境<br>操作系统: <br>Windows 2000 Professional,Windows 2000 Server ,Windows 2000 Advanced Server <br>浏览器:<br>IE 5.5 <br>NGWS <br><br>支持哪几种语言<br>ASP.NET 目前能支持3种与语言, C# (读作 &quot;C Sharp&quot;), Visual Basic,and Jscrip。.<br><br>l 使你的机器持ASP.NET,必须满足以下配置:<br><br>硬件要求:<br>1、 CPU: Intel Pentium II-class 300 MHz (最好Intel Pentium III-class 600 MHz) <br>2、 内存: 96 MB (最好128 MB) <br>3、 磁盘空间: 250 MB(完全安装) 155 MB(快速安装)<br>4、 显示: 800x600, 256 colors <br>5、 CD-ROM: required <br><br>软件要求:<br>1、 MicroSoft Windows 2000 + SP1<br>2、 MicroSoft Internet Explorer 5.5 <br>3、 IIS5.0<br>4 、 其它: MDAC 2.6 Beta 2 <br><br>.NET是运行库,还是开发平台?<br><br>微软的宏伟目标是让MicroSoft.NET彻底改变软件的开发方式、发行方式、使用方式等等,并且不止是针对微软一家,而是面向所有公司!2000年7月份在PDC展会上分发的是&quot;.NET架构&quot;包,&quot;.NET架构&quot;是MicroSoft.NET计划中首先问世的一部分,它包括了两方面的组件:&quot;.NET通用运行库&quot;和&quot;.NET类库&quot;。最近传来好消息说这两个组件已经被打包到&quot;.NET架构SDK&quot;中,放在微软的站上免费供大家下载,有兴趣的朋友一定要去试试看哦!另外,这个SDK中还包括C#、C++、JavaScript和VB的命令行编译器,使用这些编译器就可以开发应用程序和组件了,从这个角度来看,.NET架构首先是一个开发平台,因为它提供了运行库和类库,并且,下一个即将面市的就是Visual Studio.NET,其中包括了更加全面的SDK和图形化的开发界面、向导、工具等等,更象一个开发平台了。但是.NET的运行库其实已经融合到操作系统中,所以说它为运行库也是可以的。 <br><br>什么是NGWS?<br><br>ASP.NET实际上是一个崭新的运行结构的一部分,这个结构提供对所有windows应用程序的支持。这个结构是MicroSoft&#39;s Next Generation Web Services ( NGWS)关建部分。当你安装了这个结构,你就获得了ASP.NET。这个结构同样支持所有其它服务器程序技术。 <br>NGWS 结构通过对可升级分布式应用添加 [新的和增强的服务] 来扩展COM的结构,此种结构常用做编写可重复调用的可共同使用的软件组件,这些新的和增强的服务有:<br>一套统一的丰富的程序库 <br>一个支持多语言的运行引擎 <br>简单地应用建立,调试,以及维护 <br>对分布式应用加强了可升级性 <br>保护现已存在的软件和投资<br><br>在ASP.NET引入了namespace的概念,那么namespace是什么?<br><br>对象一直是Windows开发环境中,程序开发的中心。不论在VB、VBA、VC++、VBScript等,都是如此,不同的开发环境有不同的对象,这些对象均是各个语法所提供的的&quot;资源&quot;,程序开发人员可以利用这些资源,来编写所需的系统,就象我们在盖房屋的一样,建筑师使用使用同样的素材,然而盖好的房子可能不尽相同。<br>在过去的SP中,仅有Server、Request、Response…等七个对象。而在ASP.NET的对象库中却分得很细。<br>例如在ASP.NET网页中要通过SQL语句获得数据库中的数据,必须使用&quot;System.Data.SQL&quot;,这是NameSpace名称。 在System.Data.SQL下,又有很多类(Class)。每个Class可视为一个对象,因为Class下有属性、方法和事件等<br>所以,最上层的NameSpace是看作是同类型对象的集合,一个NameSpace之下可拥有多个Class。他们之间的关系如图:<br><br>通过此图,我们了解了NameSpace及Class的概念,二者分別是表示对象集合和对象。<br><br>l 如何应用名字空间(NameSpace)? <br><br>&lt;%@ Import Namespace=&quot;System.Globalization&quot;%&gt;<br><br>&lt;%@ Import Namespace=&quot;DataEmployee&quot; %&gt;<br><br>&lt;%@ Import Namespace=&quot;System.Data&quot; %&gt;<br><br>&lt;%@ Import Namespace=&quot;System.Data.ADO&quot; %&gt;<br><br>以上表示在ASP.NET网页中使用了四个NameSpace,接下来我们要申明变量,但此变量必须是已引用的四个NameSpace所属的Class,如:<br><br>Dim MyConnection As ADOConnection<br><br>Dim MyCommand As ADODataSetCommand<br><br>说明:ADOConnection及ADODataSetCommand都是System.Data.ADO之下的Class。<br><br>ASP.NET中的文件类型?<br><br>ASP 的文件类型只有一种,其扩展名是.asp文件。那么在ASP.NET,就有很多的文件名:<br><br>文件扩展名 <br> 用途及说明 <br> <br>Global.asax <br> ASP.NET系统环境设置文件,相当与ASP中的Global.asa。 <br> <br>.aspx <br> 內含ASP程序代码的文件,如同過去的.asp,浏览器可执行此类文件,向服务器 提出浏览請求 <br> <br>.asmx <br> 制作Web Service的原始文件 <br> <br>.sdl <br> 制作Web Service的XML格式的文件 <br> <br>Vb或.cs <br> 在非ASP.NET环境下,执行Web Service的文件 <br> <br>.aspc <br> 可重覆使用在多个.aspx的文件,此文件內可含有控件 <br> <br>.ascx <br> 內含User Control的文件,可內含在多個.aspx文件中 <br> <br><br>什么是NGWS Framework?<br><br>ASP的综合性能明显的要好于以前的版本。到目前为至,ASP是通过一个名叫asp.dll 的ISAPI DLL来执行的,另外还加上一些系统文件和ASP用户组件。<br>这个新的NGWS结构反映了行业信息技术观点对于建立,调试以及维护各种WEB服务的需要的转变,这些服务包括简单的客户应用到复杂的分布式结构。上面所有的概念和策略只是 Windows Distributed Internet Applications (DIA)部分结构.<br>在这里我们最重要需要认识的问题是这里所说的结构(framework)不是我们所说ASP.NET。它只是做为windows系统中所有应用的基础。下面的图表给我们演示了framework是如何支持ASP.NET应用的。 <br><br><br> <br><br>ASP.NET对于asp来说有什么突破呢?<br><br>运行机制不同<br>asp属于一种解释型的编程框架,它的核心是vbs和js,受这两种脚本语言的限制,决定了asp先天不足,它无法进行象传统编程语言那样的底层操作,所以如果你需要进行一些诸如socket、文件等的操作时不得不借助于用其他传统编程语言如C++、VB 、JAVA等编写的组件,并且由于它是解释执行的,所以在运行效率上大打折扣。而ASP.NET呢,它是一种编译型的编程框架,它的核心是NGWS runtime ,除了和asp一样可以采用vbs和js作为编程语言外,还可以用VB和C# 来编写,这就决定了它功能的强大,可以进行很多低层操作而不必借助于其他编程语言。<br>执行效率<br>由于它是编译后运行的,所以执行效率要比asp高得多。<br><br>C#编译器选项全解<br>可以使用CSC.exe/?来察看可选项.<br>输出文件相关选项 :<br>/out:&lt;file&gt; 输出文件名(如果不指定则从第一个源文件名中取得) <br>/target:exe 建立一个控制台可执行程序(这是默认选项)(可以缩略写作 /t:exe) <br>/target:winexe 建立一个windows可执行程序(可以缩略写作 /t:winexe) <br>/target:library 建立一个库(可以缩略写作 /t:library) <br>/target:module 建立一个可以加到其他汇编文件的模块(可以缩略写 作 /t:module) <br>/win32icon:&lt;file&gt; 指定一个图标作为输出文件的图标 <br>/nooutput[+|-] 只检查代码中的错误,并不生成可执行程序 <br>/define:&lt;symbol file&gt; 定义条件编译符号(可以缩略写作 /d) <br>/doc:&lt;file&gt; 生成XML文档 <br><br>输入文件相关选项: <br>/recures:&lt;wildcard&gt; 包括当前目录及其子目录下所有符合指定的通配符规则的文件 <br>/main:&lt;type&gt; 指定包含入口点的类型(忽略其他所有可能的入口点)(可以缩略写作 /m) <br>/reference:&lt;file list&gt; 参考由给出的汇编文件所指定的元数据(可以缩略写作 /r) <br>/addmodule:&lt;file list&gt; 链接指定的模块到汇编文件中 <br><br>资源相关选项 :<br>/resource:&lt;resinfo&gt; 嵌入特定的资源(可以缩略写作 /res) <br>/linkresource:&lt;resinfo&gt; 链接指定的资源到汇编文件中(可以缩略写作 /linkers) <br><br>代码生成相关选项 <br>/debug[+|-] 产生调试信息 <br>/optimize[+|-] 提供优化(可以缩略写作 /o) <br>/incremental[+|-] 进行增量编译,也就是只编译改变的部分(可以缩略写作 /incr) <br><br>错误和警告相关选项 <br>/warnaserror[+|-] 对警告与错误作相同处理 <br>/warn:&lt;n&gt; 设定警告级别(0-4)(可以缩略写作 /w) <br>/nowarn:&lt;warning list&gt; 禁止特定的警告消息 <br><br>语言相关选项 <br>/checked[+|-] 对上溢和下溢进行检查 <br>/unsafe[+|-] 允许&quot;不安全&quot;的代码 <br><br>其他方面的选项 <br>@&lt;file&gt; 读取相应文件以获取更多选项 <br>/help 显示帮助文件(可以缩略写作 /?) <br>/nologo 禁止编译版权信息 <br><br>增强的选项 <br>/baseaddress:&lt;address&gt; 指定被编译库的基地址 <br>/win32res:&lt;file&gt; 通常用来指定存放版本和图标信息的WIN32资源文件 <br>/bugreport:&lt;file&gt; 建立&quot;错误报告&quot;文件 <br>/codepage:&lt;n&gt; 指定打开源文件时使用的代码页 <br>/fullpath 指定程序生成的完整路径 <br>/nostdlib[+|-] 不参考标准库(mscorlib.dll) <br><br><br>1.2.2 Visual Studio.NET 7.0安装<br>Visual Studio.NET 7.0的安装,机器必须满足下面的要求,<br><br>1、硬件要求:<br><br>① CPU: Intel Pentium II-class 300 MHz (最好Intel Pentium III-class 600 MHz) <br>② 内存: 96 MB (最好128 MB) <br>③ 磁盘空间: 250 MB(完全安装) 155 MB(快速安装)<br>④ 显示: 800x600, 256 colors <br>⑤ CD-ROM: required <br>2、软件要求:<br>① MicroSoft Windows 2000 + SP1<br>② MicroSoft Internet Explorer 5.5 <br>③ IIS5.0<br>④ 其它: MDAC
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:45:00 |显示全部楼层

回复

[vscript]第二篇Web Form<br>第一章 WEB 页面简介<br>2.1.1 WEB FORM<br>表单,英文单词是Form,学习过VB的朋友一定不会陌生。在MS.NET架构里,Form是一个经常使用到的词汇。比如:编写Windows 应用时会提到Windows Form,编写Web 应用时会提到Web Form。Windows Form可以看作一个Windows窗体,这和在VB里面一样。而Web Form则代表了一个一个的Web页面。总的看来,Form就像是一个容纳各种控件的容器,各种控件都必须直接或者间接的和它有依存关系。Form在这里译作&quot;WEB表单&quot;似乎有些不妥。&quot;表单&quot;这个词,在WEB程序员看来,总是和HTML里面的&quot;Form&quot;相混淆。&quot;WEB表单&quot;似乎翻译成&quot;WEB页面&quot;更加妥当一些。<br>大家还记得VB里面的Form实际上就是一个对象吧,它可以有自己的属性、方法、事件等等。WEB表单,或者说WEB页面,实际上是一个&quot;对象&quot; (Object)。MS.NET架构里面一个比较重要的概念就是&quot;对象&quot;:所有的控件都是对象,甚至数据类型都成了对象;每种数据类型都有自己特有的属性和方法。我们在后面的编程中将可以体会到。<br>WEB FORM的后缀名是ASPX。当一个浏览器第一次请求一个ASPX文件时,WEB FORM页面将被CLR(common language runtime)编译器编译。此后,当再有用户访问此页面的时候,由于ASPX页面已经被编译过,所以,CLR会直接执行编译过的代码。这和ASP的情况完全不同。ASP只支持VBScript和JavaScript这样的解释性的脚本语言。所以ASP页面是解释执行的。当用户发出请求后,无论是第一次,还是第一千次,ASP的页面都将被动态解释执行。而asp.net支持可编译的语言,包括VB.NET、C#、Jscript.NET等。所以,asp.net是一次编译多次执行。<br>为了简化程序员的工作,ASPX页面不需要手工编译,而是在页面被调用的时候,由CLR自行决定是否编译。一般来说,下面两种情况下,ASPX会被重新编译:<br>1.ASPX页面第一次被浏览器请求;<br>2.ASPX被改写<br>由于ASPX页面可以被编译,所以ASPX页面具有组件一样的性能。这就使得ASPX页面至少比同样功能的ASP页面快250%!<br>下面我们来看一下简单的WEB页面。<br>2.1.2 我的第一个Page<br>把下面的代码拷贝到myfirstpage.aspx文件中,然后从浏览器访问这个文件:<br>&lt;!--源文件:form&#92;web页面简介&#92;myfirstpage.aspx--&gt;<br>&lt;form action=&quot;myfirstpage.aspx&quot; method=&quot;post&quot;&gt;<br><br>&lt;h3&gt; 姓名: &lt;input id=&quot;name&quot; type=text&gt;<br><br>所在城市: &lt;select id=&quot;city&quot; size=1&gt;<br>&lt;option&gt;北京&lt;/option&gt;<br>&lt;option&gt;上海&lt;/option&gt;<br>&lt;option&gt;重庆&lt;/option&gt;<br>&lt;/select&gt;<br><br>&lt;input type=submit value=&quot;查询&quot;&gt;<br><br>&lt;/form&gt;<br>你可能觉得这个页面太简单了,用HTML就可以完成。是的!微软建议你将所有的文件哪怕是纯HTML文件都保存为ASPX文件后缀,这样可以加快页面的访问效率!不仅仅是在asp.net环境中,在IIS5.0以后的ASP3.0就已经支持这个特性了。<br>由于我们没有对表单提交做任何响应,所以,当你按下&quot;查询&quot;按钮,页面的内容没有什么改变。<br>下面我们将逐步使用asp.net的思考方式,来完成我们的页面。<br>2.1.3 WEB页面处理过程<br>这一节我们将深入到asp.net内部,看看页面是怎样被处理的。<br>和所有的服务器端进程一样,当ASPX页面被客户端请求时,页面的服务器端代码被执行,执行结果被送回到浏览器端。这一点和ASP并没有太大的不同。<br>但是,asp.net的架构为我们做了许多别的事情。比如,它会自动处理浏览器的表单提交,把各个表单域的输入值变成对象的属性,使得我们可以像访问对象属性那样来访问客户的输入。它还把客户的点击映射到不同的服务器端事件。<br>了解WEB页面的处理过程很重要。这样你可以仔细地优化你的代码,提高代码的效率。<br>2.1.3.1 页面的一次往返处理<br>用户对Server Control的一次操作,就可能引起页面的一次往返处理:页面被提交到服务器端,执行响应的事件处理代码,重建页面,然后返回到客户端。<br>正因为每个Control都可能引发一次页面的服务器端事件,所以,asp.net尽量减少了控件的事件类型。很多组件都只有OnClick事件。特别的,asp.net不支持服务器端的OnMouseOver事件。因为OnMouseOver事件发生得非常频繁。所以,支持服务器端的OnMouseOver事件是非常不现实的。<br>2.1.3.2 页面重建<br>每一次页面被请求,或者页面事件被提交到服务器,asp.net运行环境将执行必要的代码,重建整个页面,把结果页面送到浏览器,然后抛弃页面的变量、控件的状态和属性等等页面信息。当下一次页面被处理时,asp.net运行环境是不知道它的上一次执行情况的。在这个意义上,ASPX页面是没有状态的。这也是HTTP协议的特点(为了加速页面的访问,在asp.net页面里面可以使用缓存机制,也就是保存页面的执行结果,下一次页面被请求时,直接送回上一次的执行结果。)。<br>在ASP中,当页面被提交到服务器端时,只有那些用户输入的值被传递到服务器。其他的比如组件的属性、变量的值,是不会传递的。所以服务器无法了解组件的进一步的信息。<br>在asp.net中,页面对象的属性、页面控件的属性被称为&quot;view state&quot;(页面状态)。页面状态在asp.net中被受到特别关照。请看服务器端(page1.aspx)的代码:<br>&lt;!--源文件:form&#92;web页面简介&#92;page1.aspx--&gt;<br>&lt;HTML&gt;<br>&lt;BODY&gt;<br>&lt;SCRIPT language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub ShowValues(Sender As Object, Args As EventArgs)<br>divResult.innerText = &quot;You selected &#39;&quot; _<br>&amp; selOpSys.value &amp; &quot;&#39; for machine &#39;&quot; _<br>&amp; txtName.value &amp; &quot;&#39;.&quot;<br>End Sub<br>&lt;/SCRIPT&gt;<br>&lt;DIV id=&quot;divResult&quot; runat=&quot;server&quot;&gt;<br>&lt;/DIV&gt;<br>&lt;FORM runat=&quot;server&quot;&gt;<br>机器名:<br>&lt;INPUT type=&quot;text&quot; id=&quot;txtName&quot; runat=&quot;server&quot;&gt;<br>&lt;P /&gt;<br>操作系统:<br>&lt;select id=&quot;selOpSys&quot; size=&quot;1&quot; runat=&quot;server&quot;&gt;<br>&lt;OPTION&gt;Windows 95&lt;/OPTION&gt;<br>&lt;OPTION&gt;Windows 98&lt;/OPTION&gt;<br>&lt;OPTION&gt;Windows NT4&lt;/OPTION&gt;<br>&lt;OPTION&gt;Windows 2000&lt;/OPTION&gt;<br>&lt;/SELECT&gt;<br>&lt;P /&gt;<br>&lt;INPUT type=&quot;submit&quot; value=&quot;Submit&quot; runat=&quot;server&quot; onserverclick=&quot;ShowValues&quot;&gt;<br>&lt;/FORM&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br><br>运行后将自动被解释成客户端代码,如下:<br>&lt;HTML&gt;<br>&lt;BODY&gt;<br>You selected &#39;Windows 98&#39; for machine &#39;iceberg&#39;.<br>&lt;FORM name=&quot;ctrl0&quot; method=&quot;post&quot; action=&quot;pageone.aspx&quot; id=&quot;ctrl0&quot;&gt;<br>&lt;INPUT type=&quot;hidden&quot; name=&quot;__VIEWSTATE&quot; value=&quot;a0z1741688109__x&quot;&gt;<br>机器名:<br>&lt;INPUT type=&quot;text&quot; id=&quot;txtName&quot; name=&quot;txtName&quot; value=&quot;tizzy&quot;&gt;<br>&lt;P /&gt;<br>操作系统:<br>&lt;SELECT id=&quot;selOpSys&quot; size=&quot;1&quot; name=&quot;selOpSys&quot;&gt;<br>&lt;OPTION value=&quot;Windows 95&quot;&gt;Windows 95&lt;/OPTION&gt;<br>&lt;OPTION selected value=&quot;Windows 98&quot;&gt;Windows 98&lt;/OPTION&gt;<br>&lt;OPTION value=&quot;Windows NT4&quot;&gt;Windows NT4&lt;/OPTION&gt;<br>&lt;OPTION value=&quot;Windows 2000&quot;&gt;Windows 2000&lt;/OPTION&gt;<br>&lt;/SELECT&gt;<br>&lt;P /&gt;<br>&lt;INPUT type=&quot;submit&quot; value=&quot;Submit&quot;&gt;<br>&lt;/FORM&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br><br>对于上面的代码,服务器端控件能在服务器端脚本中被自由运用。如果我们用传统的ASP代码实现上述的功能的话:<br>If Len(Request.Form(&quot;selOpSys&quot;)) &gt; 0 Then<br>StrOpSys = Request.Form(&quot;selOpSys&quot;)<br>StrName = Request.Form(&quot;txtName&quot;)<br>Response.Write(&quot;You selected &#39;&quot; &amp; strOpSys _<br>&amp; &quot;&#39; for machine &#39;&quot; &amp; strName &amp; &quot;&#39;.&quot;)<br>End If<br><br>如果我们用asp.net的话,程序代码如下:<br>If Len(selOpSys.value) &gt; 0 Then<br>Response.Write(&quot;You selected &#39;&quot; &amp; selOpSys.value _<br>&amp; &quot;&#39; for machine &#39;&quot; &amp; txtName.value &amp; &quot;&#39;.&quot;)<br>End If<br>通过上面例子不难看出:asp.net页面具有组件方式的方便性和灵活性。<br>请注意:asp.net通过把页面的状态封装到一个隐藏的输入域,从而可以在不同的页面之间实现传递页面的状态。<br>另外,asp.net也支持应用程序一级的状态管理。这个特性在ASP中就已经实现。<br>2.1.3.3 页面处理内部过程<br>我们来看看页面处理的内部过程。下面的过程是依次进行的:<br>2.1.3.3.1 Page_load<br>首先,页面的状态被恢复,然后触发Page_OnLoad事件。在这个过程中,你可以读取或者重置页面的属性和控件的属性,根据IsPostBack属性判定页面是否为第一次被请求,执行数据绑定,等等。<br>现在我们通过一个具体的例子,来详细讲述Page_load事件:<br>我们所做的这个例子关于用户登录的。<br>我们先来看page.aspx的代码:<br>&lt;!--源文件:form&#92;web页面简介&#92;page.aspx--&gt;<br>&lt;%@ Regist
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:48:00 |显示全部楼层

回复

[vscript]2.1.3.3.2 事件处理<br>这一阶段处理表单的事件。你可以处理特定的事件,也可以在表单需要校验的情况下,根据IsValid属性判定页面的输入是否有效。<br>Web Form提供了一些具有验证功能的服务器控件。这些控件提供了一套简单易用并且很强大的功能能检查输入时是否有错误。而且,还能显示提示信息给用户。<br>对于每个控件来说,都有一特定的属性,来验证输入的值是否有效。我们来看一下对输入控件需要验证的属性:<br><br><br>控件 <br> 需要验证的属性 <br> <br>HtmlInputText <br> Value <br> <br>HtmlTextAreaHtm <br> Value <br> <br>HtmlSelect <br> Value <br> <br>HtmlInputFile <br> Value <br> <br>TextBox <br> Text <br> <br>ListBox <br> SelectedItem <br> <br>DropDownList <br> SelectedItem <br> <br>RadioButtonList <br> SelectedItem <br> <br><br>好了,有了上面的介绍,我们就以例子来讲解表单的有效性验证。<br>在下面一个简单的例子中,我们将对用户的输入验证。<br>如Validate.aspx 的内容如下:<br>&lt;!--源文件:form&#92;web页面简介&#92;validate.aspx--&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub ValidateBtn_Click(sender As Object, e As EventArgs)<br>If (Page.IsValid) Then<br>lblOutput.Text = &quot;页面有效!&quot;<br>Else<br>lblOutput.Text = &quot;在页面中不能出现空项!&quot;<br>End If<br>&#39;判断是否输入为数字<br>if not isnumeric(TextBox1.text) then<br>lbloutput.text=&quot;请输入数值!&quot;<br>End if<br>End Sub<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;center&gt;&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;验证表单的例子&lt;/font&gt;&lt;/h3&gt;&lt;/center&gt;<br>&lt;p&gt;<br>&lt;form runat=&quot;server&quot;&gt;<br>&lt;title&gt;表单验证&lt;/title&gt;<br>&lt;center&gt;<br>&lt;table bgcolor=&quot;white&quot; cellpadding=10&gt;<br>&lt;tr &gt;<br>&lt;td colspan=3&gt;<br>&lt;asp:Label ID=&quot;lblOutput&quot; Text=&quot;请填写下面的内容&quot; ForeColor=&quot;red&quot; Font-Name=&quot;Verdana&quot; Font-Size=&quot;10&quot; runat=server /&gt;&lt;br&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td align=right&gt;<br>&lt;font face=Verdana size=2&gt;储蓄卡类型:&lt;/font&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;ASP:RadioButtonList id=RadioButtonList1 RepeatLayout=&quot;Flow&quot; runat=server&gt;<br>&lt;asp:ListItem&gt;绿卡&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem&gt;牡丹卡&lt;/asp:ListItem&gt;<br>&lt;/ASP:RadioButtonList&gt;<br>&lt;/td&gt;<br>&lt;td align=middle rowspan=1&gt;<br>&lt;asp:RequiredFieldValidator id=&quot;RequiredFieldValidator1&quot;<br>ControlToValidate=&quot;RadioButtonList1&quot;<br>Display=&quot;Static&quot;<br>InitialValue=&quot;&quot; Width=&quot;100%&quot; runat=server&gt;<br>*<br>&lt;/asp:RequiredFieldValidator&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td align=right&gt;<br>&lt;font face=Verdana size=2&gt;卡号:&lt;/font&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;ASP:TextBox id=TextBox1 runat=server /&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;asp:RequiredFieldValidator id=&quot;RequiredFieldValidator2&quot;<br>ControlToValidate=&quot;TextBox1&quot;<br>Display=&quot;Static&quot;<br>Width=&quot;100%&quot; runat=server&gt;<br>*<br>&lt;/asp:RequiredFieldValidator&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;/td&gt;<br>&lt;td&gt;<br>&lt;ASP:Button id=Button1 text=&quot;验证&quot; OnClick=&quot;ValidateBtn_Click&quot; runat=server /&gt;<br>&lt;/td&gt;<br>&lt;td&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;/center&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>我们对验证按钮的OnClick事件进行编程,其中用到了IsNumeric()函数,用来判断变量是否为数值型的。我们还可以用IsData()函数对输入的日期进行判断。IsData()接受的合法日期为100年1月1日到9999年12月31日。<br>运行如图:<br><br><br><br>当我们在卡号一栏中输入一些字母,而不是数值时,页面上将会提示你输入数值。<br>让我们再举一个很有用的验证应用:<br>当用户在填写个人信息的时候,往往需要输入身份证号,那么我们是如何进行身份证号的验证呢?<br>要解决这个问题,首先,让我们先看看我国的身份证号是如何编码的。<br>1 2 3 4 5<br>XX XXXX XXXXXX XX X (这个是没有升位以前的一个身份证号码的组成方式)<br>1 省 2 地市 3 生日 4 顺序码 5 性别<br>在这个例子中,我们只对省份进行判断。<br>身份编码一览表:<br><br>北京<br> 吉林 22 <br> 福建 35 <br> 广东 44 <br> 云南 53 <br> <br>天津 12 <br> 黑龙江 23 <br> 江西 36 <br> 广西 45 <br> 西藏 54 <br> <br>河北 13 <br> 上海 31 <br> 山东 37 <br> 海南 46 <br> 陕西 61 <br> <br>山西 14 <br> 江苏 32 <br> 河南 41 <br> 重庆 50 <br> 甘肃 62 <br> <br>内蒙古 15 <br> 浙江 33 <br> 湖北 42 <br> 四川 51 <br> 青海 63 <br> <br>辽宁 21 <br> 安徽 34 <br> 湖南 43 <br> 贵州 52 <br> 宁夏 64 <br> <br>新疆 65 <br> 台湾 71 <br> 香港 81 <br> 澳门 82 <br> 国外 91 <br> <br><br>在这个程序中,仅仅作了一个简单的判断<br>Validate1.aspx的文件内容如下:<br>&lt;!--源文件:form&#92;web页面简介&#92;validate1.aspx--&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub ValidateBtn_Click(sender As Object, e As EventArgs)<br>If (Page.IsValid) Then<br>lblOutput.Text = &quot;页面有效!&quot;<br>Else<br>lblOutput.Text = &quot;在页面中不能出现空项!&quot;<br>End If<br>If not isnumeric(TextBox1.text) then<br>bloutput.text=&quot;请输入数值!&quot;<br>End if<br>&#39;在这里我们只作了一个简单的判断。使用了left$()函数<br>if left$(textbox1.text,2)&lt;&gt;&quot;11&quot; then<br>lbloutput.text=&quot;请验证你的身份证输入&quot;<br>End if<br>End Sub<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;center&gt;&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;验证表单的例子&lt;/font&gt;&lt;/h3&gt;&lt;/center&gt;<br>&lt;p&gt;<br>&lt;form runat=&quot;server&quot;&gt;<br>&lt;title&gt;表单验证&lt;/title&gt;<br>&lt;center&gt;<br>&lt;table bgcolor=&quot;white&quot; cellpadding=10&gt;<br>&lt;tr &gt;<br>&lt;td colspan=3&gt;<br>&lt;asp:Label ID=&quot;lblOutput&quot; Text=&quot;请填写下面的内容&quot; ForeColor=&quot;red&quot; Font-Name=&quot;Verdana&quot; Font-Size=&quot;10&quot; runat=server /&gt;&lt;br&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td align=right&gt;<br>&lt;font face=Verdana size=2&gt;身份证号:&lt;/font&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;ASP:TextBox id=TextBox1 runat=server /&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;asp:RequiredFieldValidator id=&quot;RequiredFieldValidator2&quot;<br>ControlToValidate=&quot;TextBox1&quot;<br>Display=&quot;Static&quot;<br>Width=&quot;100%&quot; runat=server&gt;<br>*<br>&lt;/asp:RequiredFieldValidator&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;/td&gt;<br>&lt;td&gt;<br>&lt;ASP:Button id=Button1 text=&quot;验证&quot; OnClick=&quot;ValidateBtn_Click&quot; runat=server /&gt;<br>&lt;/td&gt;<br>&lt;td&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;/center&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>在这个程序中,我们仅对北京地区的身份证号进行了验证,我们使用Left$()函数把字符串的前两个字符取出进行比较。如果大家感兴趣的话,可以把这个程序补充完整。<br>程序的运行如图:<br>这是输入正确的情况,如输入不正确,则显示(如图):<br><br>[/vscript]<br>接上一篇文章
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:50:00 |显示全部楼层

回复

[vscript]我们在验证的时候,有时需要进行特殊的验证。在下面的表中,列出了需要进行特殊验证时要使用的特殊控件。<br><br>控件 <br> 描述 <br> <br>RequiredFieldValidator  使用户在输入时,不是使这一项为空 <br> <br>CompareValidator <br> 对两个控件的值进行比较 <br> <br>RangeValidator <br> 对输入的值进行控制,使其值界定在一定范围内 <br> <br>RegularExpressionValidator <br> 把用户输入的字符和自定义的表达式进行比较 <br> <br>CustomValidator <br> 自定义验证方式 <br> <br>ValidationSummary <br> 在一个页面中显示总的验证错误 <br> <br><br><br>现在对各个验证控件介绍:<br><br>1. RequiredFieldValidator<br><br>下面的这个例子,演示了RequiredFieldValidator控件的使用方法。<br>validate3.aspx文件:<br>&lt;!--源文件:form&#92;web页面简介&#92;validate3.aspx--&gt;<br>&lt;html&gt;<br>&lt;body&gt;<br>&lt;center&gt;<br>&lt;title&gt;验证控件演示 (1)&lt;/title&gt;<br>&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;验证控件演示 (1)&lt;/font&gt;&lt;/h3&gt;<br>&lt;form runat=server&gt;<br>姓名: &lt;asp:TextBox id=Text1 runat=&quot;server&quot;/&gt;<br>&lt;asp:RequiredFieldValidator id=&quot;RequiredFieldValidator1&quot; ControlToValidate=&quot;Text1&quot; Font-Name=&quot;Arial&quot; Font-Size=&quot;11&quot; runat=&quot;server&quot;&gt;<br>此项不能为空!<br>&lt;/asp:RequiredFieldValidator&gt;<br>&lt;p&gt;<br>&lt;asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;验证&quot; /&gt;<br>&lt;/form&gt;<br>&lt;/center&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>当我们不在文本框中输入内容的时候,页面上将会出现不能为空的提示。<br><br>程序运行如下: <br><br><br><br>2.CompareValidator 控件 为了比较两个控件的值,此时我们需要使用CompareValidator 控件。<br>在下面的这个例子中,我们将讲解CompareValidator 控件的用法。<br>先看文件validata4.aspx:<br>&lt;!--源文件:form&#92;web页面简介&#92;validate4.aspx--&gt;<br>&lt;%@ Page clienttarget=downlevel %&gt;<br>&lt;html&gt;<br>&lt;title&gt;CompareValidator控件示例&lt;/title&gt;<br>&lt;head&gt;<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub Button1_OnSubmit(sender As Object, e As EventArgs)<br>If Page.IsValid Then<br>lblOutput.Text = &quot;比较正确!&quot;<br>Else<br>lblOutput.Text = &quot;比较不正确!&quot;<br>End If<br>End Sub<br>Sub lstOperator_SelectedIndexChanged(sender As Object, e As EventArgs)<br>comp1.Operator = lstOperator.SelectedIndex<br>comp1.Validate<br>End Sub<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;center&gt;<br>&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;CompareValidator控件示例&lt;/font&gt;&lt;/h3&gt;<br>&lt;form runat=server&gt;<br>&lt;table bgcolor=&quot;#eeeeee&quot; cellpadding=10&gt;<br>&lt;tr &gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;字符串 1:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:TextBox Selected id=&quot;txtComp&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;比较运算符:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:ListBox id=&quot;lstOperator&quot; OnSelectedIndexChanged=&quot;lstOperator_SelectedIndexChanged&quot; runat=&quot;server&quot;&gt;<br>&lt;asp:ListItem Selected Value=&quot;Equal&quot; &gt;=&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;NotEqual&quot; &gt;&lt;&gt;&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;GreaterThan&quot; &gt;&gt;&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;GreaterThanEqual&quot; &gt;&gt;=&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;LessThan&quot; &gt;&lt;&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;LessThanEqual&quot; &gt;=&lt;&lt;/asp:ListItem&gt;<br>&lt;/asp:ListBox&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;字符串 2:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:TextBox id=&quot;txtCompTo&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;&lt;p&gt;<br>&lt;asp:Button runat=server Text=&quot;验证&quot; ID=&quot;Button1&quot; onclick=&quot;Button1_OnSubmit&quot; /&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;asp:CompareValidator id=&quot;comp1&quot; ControlToValidate=&quot;txtComp&quot; ControlToCompare = &quot;txtCompTo&quot; Type=&quot;String&quot; runat=&quot;server&quot;/&gt;<br>&lt;br&gt;<br>&lt;asp:Label ID=&quot;lblOutput&quot; Font-Name=&quot;verdana&quot; Font-Size=&quot;10pt&quot; runat=&quot;server&quot;/&gt;<br>&lt;/form&gt;<br>&lt;/center&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>在上面的代码中,我们实现了对两个控件的值进行比较。<br>程序运行如下:<br>当我们在两个文本框中输入值,然后选定运算符后,点验证按钮后,在页面上将显示<br><br>比较结果:: <br><br><br><br>3.RangeValidator控件 RangeValidator控件主要界定输入的值的范围。因为有时我们要求输入的值是要有一定范围的,所以我们要使用RangeValidator来判断。<br>在下面的这个例子中,我们将来介绍RangeValidator控件。<br>请看validata5.aspx的程序内容:<br>&lt;!--源文件:form&#92;web页面简介&#92;validate5.aspx--&gt;<br>&lt;%@ Page clienttarget=downlevel %&gt;<br>&lt;html&gt;<br>&lt;center&gt;<br>&lt;title&gt;RangeValidator控件演示&lt;/title&gt;<br>&lt;head&gt;<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub Button1_Click(sender As Object, e As EventArgs)<br>If (Page.IsValid) Then<br>lblOutput.Text = &quot;结果正确!&quot;<br>Else<br>lblOutput.Text = &quot;结果不正确!&quot;<br>End If<br>End Sub<br>Sub lstOperator_SelectedIndexChanged(sender As Object, e As EventArgs)<br>rangeVal.Type = lstType.SelectedIndex<br>rangeVal.Validate<br>End Sub<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br><br>&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;RangeValidator控件演示&lt;/font&gt;&lt;/h3&gt;<br>&lt;p&gt;<br>&lt;form runat=&quot;server&quot;&gt;<br>&lt;table bgcolor=&quot;#eeeeee&quot; cellpadding=10&gt;<br>&lt;tr &gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;输入要验证的值:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:TextBox Selected id=&quot;txtComp&quot; runat=&quot;server&quot;/&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;数据类型:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:DropDownList id=&quot;lstType&quot; OnSelectedIndexChanged=&quot;lstOperator_SelectedIndexChanged&quot; runat=server&gt;<br>&lt;asp:ListItem Selected Value=&quot;String&quot; &gt;String&lt;/asp:ListItem&gt;<br>&lt;asp:ListItem Value=&quot;Integer&quot; &gt;Integer&lt;/asp:ListItem&gt;<br>&lt;/asp:DropDownList&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;最小值:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:TextBox id=&quot;txtMin&quot; runat=&quot;server&quot; /&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;h5&gt;&lt;font face=&quot;Verdana&quot;&gt;最大值:&lt;/font&gt;&lt;/h5&gt;<br>&lt;asp:TextBox id=&quot;txtMax&quot; runat=&quot;server&quot; /&gt;&lt;p&gt;<br>&lt;asp:Button Text=&quot;验证&quot; ID=&quot;Button1&quot; onclick=&quot;Button1_Click&quot; runat=&quot;server&quot; /&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;asp:RangeValidator id=&quot;rangeVal&quot; Type=&quot;String&quot; ControlToValidate=&quot;txtComp&quot; MaximumControl=&quot;txtMax&quot; MinimumControl=&quot;txtMin&quot; runat=&quot;server&quot;/&gt;<br>&lt;br&gt;<br>&lt;asp:Label id=&quot;lblOutput&quot; Font-Name=&quot;verdana&quot; Font-Size=&quot;10pt&quot; runat=&quot;server&quot; /&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/center&gt;<br>&lt;/html&gt;<br>当我们在三个文本框中分别输入要验证的值,最大值,和最小值,然后按下验证按钮,页面上将显示判断的结果。<br>在本例中我们只能比较integer和string的值,当然,我们也可以增加数据类型,如double型,float型,date型,currency型等。<br>结果运行如下: <br><br><br><br>4. RegularExpressionValidator控件 我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题。因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行。 使用RegularExpressionValidator服务器控件,可以用来检查我们输入的信息是否和我们的自定义的
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 17:52:00 |显示全部楼层

回复

[vscript]2.1.3.3.3 Page_Unload<br><br>这个阶段页面已经处理完毕,需要做些清理工作。一般地,你可以在这个阶段关闭打开的文件和数据库链路,或者释放对象。<br>1、 断开数据库连接<br>请看如下脚本:<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>&#39;定义一个共有变量<br>public Dim MyConnection As SQLConnection<br>&#39;定义Page_Load事件<br>Sub Page_Load(Src As Object, E As EventArgs) <br>Dim DS As DataSet<br><br>Dim MyCommand As SQLDataSetCommand<br>MyConnection = New SQLConnection(&quot;server=&#39;iceberg&#39;;uid=sa;pwd=;database=info&quot;) MyCommand = New SQLDataSetCommand(&quot;select * from infor&quot;,MyConnection)<br>Myconnection.open()<br>DS = New DataSet()<br>MyCommand.FillDataSet(ds, &quot;infor&quot;)<br>MyDataGrid.DataSource=ds.Tables(&quot;infor&quot;).DefaultView<br>MyDataGrid.DataBind()<br>End Sub<br>&#39;定义Page_UnLoad事件<br>Sub Page_UnLoad(Src As Object, E As EventArgs)<br>&#39;与数据库断开连接 <br>MyConnection.Close()<br>End Sub<br>现在我们在来看一个对文件操作的例子。<br>在这个例子中,我们使用的了两个事件,Page_Load事件和Page_Unload事件。在Page_Load事件先创建一个文件,然后向这个文件中写入内容。在Page_Unload事件中我们将此文件关闭。<br>代码如下:<br>&lt;%@ import namespace=&quot;system.io&quot; %&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;title&gt;ASP.NET 测试 写 文本文件&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;script language=&quot;vb&quot; runat=&quot;server&quot;&gt;<br>public Dim writeFile As StreamWriter<br>Sub Page_Load(Sender As Object,E as EventArgs)<br>writeFile = File.CreateText( &quot;c:&#92;test.txt&quot; )<br>writeFile.WriteLine( &quot;这是一个测试文件!&quot; )<br>writeFile.WriteLine( &quot;使用了Page_Load事件和Page_Unload事件!&quot; )<br>Response.Write( &quot;test.txt 创建 并 写入 成功!&quot; )<br>End Sub<br>Sub Page_UnLoad(Sender AS Object, E as EventArgs)<br>writeFile.Close<br>End Sub<br>&lt;/script&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>这样,我们就使用了Page_Load事件和Page_Unload事件。很明显,我们定义Page_Load事件,是因为这个阶段页面已经处理完毕,需要做些清理工作。<br>上面我们分析了页面处理最重要的几个阶段。应该说明的是:页面的处理过程远比上面的复杂,因为每个控件都需要初始化。在后面的章节中,我们还将了解到更加详细的页面处理过程。<br><br>2.1.4 Web Form事件模型<br><br>在asp.net中,事件是一个非常重要的概念。我们举两个例子来说明在Web Form 中的应用。<br><br>2.1.4.1 例子一:多按钮事件<br><br>我们在一个&lt;form&gt;&lt;/form&gt;里面有几个按钮,多个事件的响应我们该怎么处理呢?在asp.net中有很好的处理机制,我们可以在一个页面中写几个方法来分别响应不同的事件。<br><br>在下面的例子中,将根据五个按钮的功能,我们定义了五个方法:AddBtn_Click(Sender As Object, E As EventArgs)、AddAllBtn_Click(Sender As Object, E As EventArgs)、RemoveBtn_Click(Sender As Object, E As EventArgs)、RemoveAllBtn_Click(Sender As Object, E As EventArgs)、result(Sender As Object,E As EventArgs),分别用来处理全部加进、单个加进、单个取消、全部取消和提交事件。我们的form提交的时候,还是提交给本页面,由本页面进行处理,代码如下:<br>&lt;form action=&quot;menent.aspx&quot; runat=server&gt;<br>其中,menent.aspx就是本页面。<br><br>Menent.aspx文件代码如下: <br>&lt;!--源文件:form&#92;web页面简介&#92;menent.aspx--&gt;<br>&lt;html&gt;<br><br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br><br>Sub AddBtn_Click(Sender As Object, E As EventArgs)<br><br>If Not (AvailableFonts.SelectedIndex = -1)<br>InstalledFonts.Items.Add(New ListItem(AvailableFonts.SelectedItem.Value))<br>AvailableFonts.Items.Remove(AvailableFonts.SelectedItem.Value)<br>End If<br>End Sub<br><br>Sub AddAllBtn_Click(Sender As Object, E As EventArgs)<br><br>Do While Not (AvailableFonts.Items.Count = 0)<br>InstalledFonts.Items.Add(New ListItem(AvailableFonts.Items(0).Value))<br>AvailableFonts.Items.Remove(AvailableFonts.Items(0).Value)<br>Loop<br>End Sub<br><br>Sub RemoveBtn_Click(Sender As Object, E As EventArgs)<br><br>If Not (InstalledFonts.SelectedIndex = -1)<br>AvailableFonts.Items.Add(New ListItem(InstalledFonts.SelectedItem.Value))<br>InstalledFonts.Items.Remove(InstalledFonts.SelectedItem.Value)<br>End If<br>End Sub<br><br>Sub RemoveAllBtn_Click(Sender As Object, E As EventArgs)<br><br>Do While Not (InstalledFonts.Items.Count = 0)<br>AvailableFonts.Items.Add(New ListItem(InstalledFonts.Items(0).Value))<br>InstalledFonts.Items.Remove(InstalledFonts.Items(0).Value)<br>Loop<br>End Sub<br><br>Sub result(Sender As Object,E As EventArgs)<br><br>dim tmpStr as String<br><br>tmpStr=&quot;&lt;br&gt;&quot;<br>Do While Not (InstalledFonts.Items.Count = 0)<br>tmpStr=tmpStr &amp; InstalledFonts.items(0).value &amp; &quot;&lt;br&gt;&quot;<br>InstalledFonts.items.remove(InstalledFonts.items(0).value)<br>Loop<br>tmpStr=System.Web.HttpUtility.UrlEncodeToString(tmpStr,System.Text.Encoding.UTF<br>8)<br>Page.Navigate(&quot;result.aspx?InstalledFonts=&quot; &amp; tmpStr)<br><br>End Sub <br><br>&lt;/script&gt;<br><br>&lt;body bgcolor=&quot;#ccccff&quot;&gt;<br>&lt;center&gt;<br>&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;.NET-&gt;不同事件的处理方法!&lt;/font&gt;&lt;/h3&gt;<br>&lt;/center&gt;<br>&lt;center&gt;<br>&lt;form action=&quot;menent.aspx&quot; runat=server&gt;<br><br>&lt;table&gt;<br>&lt;tr&gt;<br>&lt;td&gt;<br>现有字体<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;!-- Filler --&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>选择的字体 <br>&lt;/td&gt;<br>&lt;/tr&gt; <br>&lt;tr&gt;<br>&lt;td&gt;<br>&lt;asp:listbox id=&quot;AvailableFonts&quot; width=&quot;100px&quot; runat=server&gt;<br>&lt;asp:listitem&gt;Roman&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Arial Black&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Garamond&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Somona&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Symbol&lt;/asp:listitem&gt;<br>&lt;/asp:listbox&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;!-- Filler --&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;asp:listbox id=&quot;InstalledFonts&quot; width=&quot;100px&quot; runat=server&gt;<br>&lt;asp:listitem&gt;Times&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Helvetica&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;Arial&lt;/asp:listitem&gt;<br>&lt;/asp:listbox&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt; <br>&lt;tr&gt;<br>&lt;td&gt;<br>&lt;!-- Filler --&gt;<br>&lt;/td&gt;<br>&lt;td&gt;<br>&lt;asp:button text=&quot;&lt;&lt;==&quot; OnClick=&quot;RemoveAllBtn_Click&quot; runat=server/&gt;<br>&lt;asp:button text=&quot;&lt;--&quot; OnClick=&quot;RemoveBtn_Click&quot; runat=server/&gt; <br>&lt;asp:button text=&quot;--&gt;&quot; OnClick=&quot;AddBtn_Click&quot; runat=server/&gt;<br>&lt;asp:button text=&quot;==&gt;&gt;&quot; OnClick=&quot;AddAllBtn_Click&quot; runat=server/&gt; <br>&lt;asp:label id=&quot;Message&quot; forecolor=&quot;red&quot; font-bold=&quot;true&quot; runat=server/&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr align=center&gt;<br>&lt;td align=center&gt;<br>&lt;asp:button text=&quot;提交&quot; Onclick=&quot;result&quot; runat=server/&gt;<br>&lt;!-- Filler --&gt;<br>&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br><br>&lt;/form&gt;<br>&lt;/center&gt;<br>&lt;/body&gt;<br><br>&lt;/html&gt;<br><br>写一个页面,在提交时候接收相关信息。我们在页面进入的时候取得传送过来的数值,用:<br><br>Request.Params(&quot;InstalledFonts&quot;)<br><br>来获得,具体来看我们的文件result.aspx的代码:<br>&lt;!--源文件:form&#92;web页面简介&#92;result.aspx--&gt; <br>&lt;html&gt;<br>&lt;script language=&quot;VB&quot; runat=&quot;server&quot;&gt;<br>Sub Page_Load(Sender As Object, E As EventArgs)<br>If Not (Page.IsPostBack)<br>NameLabel.Text = Request.Params(&quot;InstalledFonts&quot;)<br>End If<br>End Sub<br>&lt;/script&gt;<br><br>&lt;BODY &gt;<br>&lt;h3&gt;&lt;font face=&quot;Verdana&quot;&gt;.NET-&gt;多事件处理!&lt;/font&gt;&lt;/h3&gt;<br>&lt;p&gt;<br>&lt;p&gt;<br>&lt;hr&gt;<br>&lt;form action=&quot;controls_NavigationTarget.aspx&quot; runat=server&gt;<br>&lt;font face=&quot;Verdana&quot;&gt; <br>Hi,你的选择是: &lt;asp:label id=&quot;NameLabel&quot; runat=server/&gt;!<br>&lt;/font&gt;<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>程序运行如下: <br><br><br><
回复

使用道具 举报

3

主题

0

听众

80

积分

VIP贵宾

Rank: 5

性别
保密
听众数
0
买家信用
卖家信用
在线时间
7 小时
相册
0

社区元老勋章 无私奉献勋章

发表于 2006-8-16 20:40:00 |显示全部楼层

回复

[vscript]第二章 服务器端控件<br><br>2.2.1 服务器端控件示例<br><br>在讲述服务器端控件的时候,我们先来讲述一个具体的例子。<br>我们说过,在asp.net里面,一切都是对象。我们也谈到:WEB页面本身就是一个对象。或者说,WEB页面就是一个对象的容器。那么,这个容器可以装些什么东西呢?这一节我们学习服务器端控件,英文是Server Control。这是WEB页面能够容纳的对象之一。<br><br>什么是Control?熟悉VB的读者肯定再清楚不过了。简单地说,Control就是一个可重用的组件或者对象,这个组件不但有自己的外观,还有自己的数据和方法,大部分组件还可以响应事件。通过微软的集成开发环境(Visual Studio.NET 7.0),你可以简单地把一个Control拖放到一个Form中。<br>那为什么叫&quot;Server Control&quot;?这是因为这些Control是在服务器端存在的。服务器端控件也有自己的外观,在客户端浏览器中,Server Control的外观由HTML代码来表现。Server Control会在初始化时,根据客户的浏览器版本,自动生成适合浏览器的HTML代码。以前我们做网页或者做ASP程序时候,必须考虑到浏览器的不同版本对HTML的支持有所不同,比如Netscape和IE对DHTML的支持就有所不同。当时,解决浏览器版本兼容问题的最有效方法,就是在不同版本的浏览器中作测试。现在,由于Server Control自动适应不同的浏览器版本,也就是自动兼容不同版本的浏览器,程序员的工作量减轻了许多。下面,我们来看看如何在WEB FORM中嵌入Server Control。我们的例子是从上一节继承来的: 如图:<br>下面是实现如图效果的代码:(sample.aspx)<br>&lt;!--源文件:form&#92;ServerControl&#92;sample.aspx--&gt;<br>&lt;html&gt;<br>&lt;script language=&quot;VB&quot; runat=server&gt;<br>Sub SubmitBtn_Click(Sender As Object, E As EventArgs)<br>Message.Text = &quot;Hi &quot; &amp; Name.Text &amp; &quot;, 你选择的城市是: &quot; &amp; city.SelectedItem.Text<br>End Sub<br>&lt;/script&gt;<br>&lt;body&gt;<br>&lt;center&gt;<br>&lt;form action=&quot;form2.aspx&quot; method=&quot;post&quot; runat=&quot;server&quot;&gt;<br>&lt;h3&gt;姓名: &lt;asp:textbox id=&quot;Name&quot; runat=&quot;server&quot;/&gt;<br><br>所在城市: &lt;asp:dropdownlist id=&quot;city&quot; runat=server&gt;<br>&lt;asp:listitem&gt;北京&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;上海&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;重庆&lt;/asp:listitem&gt;<br>&lt;/asp:dropdownlist&gt;<br>&lt;asp:button type=submit text=&quot;确定&quot; OnClick=&quot;SubmitBtn_Click&quot; runat=&quot;server&quot;/&gt;<br>&lt;p&gt;<br>&lt;asp:label id=&quot;Message&quot; runat=&quot;server&quot;/&gt;<br>&lt;/form&gt;<br>&lt;/center&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>请注意:上面的代码中我们使用了三种Server Control,分别是:<br><br>1、 asp:textbox<br>2、asp:dropdownlist<br>3、asp:label<br><br>我们注意到三个控件都有相同的RunAt属性:RunAt=&quot;Sevrer&quot;。所有的服务器端控件都有这样的属性。这个属性标志了一个控件是在Server端进行处理的。<br>我们看下面的代码:<br><br>&lt;script language=&quot;VB&quot; runat=server&gt;<br>Sub SubmitBtn_Click(Sender As Object, E As EventArgs)<br>Message.Text = &quot;Hi &quot; &amp; Name.Text &amp; &quot;, 你选择的城市是: &quot; &amp; city.SelectedItem.Text<br>End Sub<br>&lt;/script&gt;<br><br>用过VB的朋友是不是觉得很熟悉?没错,这是用VB写的一个事件处理函数,void SubmitBtn_Click(Object sender , EventArgs e) ,你可能一看就明白了,void代表该函数没有返回值,该函数带有两个参数,可是这里的Sender 的意义是什么意思呢?它的用处又到底是什么呢?其实很简单,这个Sender 就是这个事件的触发者。这里,Sender 就是被Click 的button。其中代码只有一行, 你可能注意到这行代码中的Message、Name、city你并没有定义,那么它们从哪里来的呢?<br><br>看下面的代码::<br>&lt;form action=&quot;form2.aspx&quot; method=&quot;post&quot; runat=&quot;server&quot;&gt;<br>&lt;h3&gt; Name: &lt;asp:textbox id=&quot;Name&quot; runat=&quot;server&quot;/&gt;<br>Category: &lt;asp:dropdownlist id=&quot;city&quot; runat=server&gt;<br>&lt;asp:listitem&gt;北京&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;上海&lt;/asp:listitem&gt;<br>&lt;asp:listitem&gt;重庆&lt;/asp:listitem&gt;<br>&lt;/asp:dropdownlist&gt;<br>&lt;asp:button type=submit text=&quot;确定&quot; OnClick=&quot;SubmitBtn_Click&quot; runat=&quot;server&quot;/&gt;<br>&lt;p&gt;<br>&lt;asp:label id=&quot;Message&quot; runat=&quot;server&quot;/&gt;<br>&lt;/form&gt;<br>我们发现每个服务端的控件都带有一个ID号。而我们在VB.NET代码中所引用的就是这些ID。我们可以认为ID就是控件的名称。在ASP中我们也使用过ID吧。那时候,ID属性和Name属性并没有什么不同:<br>&lt;input id=email name=email &gt;<br>在客户端,我们通过VBSCript代码或者Jscript代码,可以这样访问Form表单的Input域:<br>&lt;SCRIPT LANGUAGE=javascript&gt;<br>&lt;!--<br>document.all(&quot;email&quot;)=&quot;darkman@yesky.com&quot;;<br>//--&gt;<br>&lt;/SCRIPT&gt;<br>从上面的代码可以看出,在DHTML中,我们也是通过ID来访问Form表单的输入域的。在ASPX中,情况有些类似之处。差别在于:一个在客户端,一个在服务器端。<br>如果你和第一节的例子代码对比一下,你会发现:这个表单的写法和html表单完全不同了吧?首先,所有的表单项包括表单本身后面都加上了runat=server,这句话的意思就是说这个是服务器端控制项,另外象传统表单的什么&lt;input type=text&gt;等的写法都变了,你仔细观察一下可以看出,原来的文本框变为&lt;asp:textbox&gt;,选择框变为&lt;asp:dropdownlist&gt; , 选择框选项变为&lt;asp:listitem&gt;,而submit按钮变为&lt;asp:button&gt;,这个按钮对应的控制函数就刚才我提到的那个SubmitBtn_Click函数,它是运行在服务器端的。另外还有一个服务器端控制&lt;asp:label id=&quot;Message&quot; runat=&quot;server&quot;/&gt;,这个asp:label是传统表单所没有的,它是一个服务器端文本控制,那么就存在一个问题,如果传统的HTML里没有这个元素,那么ASP.NET是怎么接收的呢?你运行一下这个程序,然后看一下HTML源码,你会发现这么一行:<br>&lt;input type=&quot;hidden&quot; name=&quot;__VIEWSTATE value=&quot;…&quot; /&gt;对,ASP.NET就是通过这个隐藏表单的形式传递过去的。<br>所以,一个客户端控件,加上runat=Server就变成服务器端控件,服务器端控件能在服务器端脚本中被自由运用。在以后的章节中,我们还要对常用的服务器端控件进行详细介绍。<br><br>2.2.2 文本输入控件<br>文本输入控件目的是让用户输入文本,文本模式是一个单行的输入框,但是用户可以根据自己的需要把它改成密码输入模式或者多行输入模式。<br><br>在此我们用单行文本输入模式和密码模式来说明,在asp.net中,输入一个文本,可用下面的语句来表示:<br>&lt;!--输入邮件地址--&gt; <br>&lt;asp:TextBox id=email width=200px maxlength=60 runat=server /&gt;<br>第一句为注释,我们可以设定输入框的宽度和文本的长度,runat=server为表示运行于服务器端,下面我们来看看输入控件的校验,一个简单的语句就可以实现我们在普通的html页面上的复杂的JavaScript、VBScript或者其他代码的验证。首先我们用户必须输入邮件地址:<br><br>&lt;!--验证邮件的有效性!-&gt;不能为空--&gt; <br>&lt;asp:RequiredFieldValidator id=&quot;emailReqVal&quot;<br>ControlToValidate=&quot;email&quot;<br>ErrorMessage=&quot;Email. &quot;<br>Display=&quot;Dynamic&quot;<br>Font-Name=&quot;Verdana&quot; Font-Size=&quot;12&quot;<br>runat=server&gt;<br>*<br>&lt;/asp:RequiredFieldValidator&gt;<br>ControlToValidate=&quot;email&quot;属性为针对TextBox id=email的文本框,Display属性我们定义为&quot;Dynamic&quot;,即为当鼠标光标所在位置发生变化时属性根据条件变化。如果为空,则打印出&quot; * &quot;字符出来。<br><br>在通常情况下,邮件地址总会包含一些特定的字符,我们在验证的时候,就可以要求用户输入的内容中包含我们规定的字符。<br><br>&lt;!--验证邮件的有效性!-&gt;必须包含有效字符--&gt; <br>&lt;asp:RegularExpressionValidator id=&quot;emailRegexVal&quot;<br>ControlToValidate=&quot;email&quot;<br>Display=&quot;Static&quot;<br>ValidationExpression=&quot;^[&#92;w-]+@[&#92;w-]+&#92;.(com|net|org|edu|mil)$&quot;<br>Font-Name=&quot;Arial&quot; Font-Size=&quot;11&quot;<br>runat=server&gt;<br>不是有效邮件地址<br>&lt;/asp:RegularExpressionValidator&gt;<br>ControlToValidate=&quot;email&quot;语句跟上面一样,<br>ValidationExpression=&quot;^[&#92;w-]+@[&#92;w-]+&#92;.(com|net|org|edu|mil)$&quot;表示我们在邮件里要包含的内容,如果没有包含,则打印出&quot;不是有效邮件地址&quot;这个提示。<br><br>对密码也是同样的道理的,主要的差别是,对于密码,通常我们要确认一次,校验两次输入的密码是否相等。下面是我们的代码:<br><br>&lt;!--输入确认密码-&gt;两个密码是否相等--&gt; <br>&lt;asp:CompareValidator id=&quot;CompareValidator1&quot;<br>ControlToValidate=&quot;passwd2&quot; ControlToCompare=&quot;passwd&quot;<br>Display=&quot;Static&quot;<br>Font-Name=&quot;Arial&
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册


关闭

站长推荐上一条 /1 下一条



      
    Archiver|手机版|臣迅电子商务|网站地图|渝ICP备11003388号

GMT+8, 2012-5-20 09:22

© 2001-2011 Powered by Discuz! X2.5. Theme By Yeei! update By CNNTEC

webSite begin 2005

回顶部