1、ASP.NET 概述 当 ASP 第一次发布时, Web 编程还比较困难,因为需要 IIS 来处理 ASP 页。后来,ASP.NET2.0 和 Visual Studio2005 通过引入网站开发模型使一切工作都变得容易了。借助该网站模型,您不必在 Visual Studio 中创建新项目,而是可以指向一个目录并开始编写网页和代码。此外,您还可以使用内置的 ASP.NET Development Server 快速测试站点, ASP.NET Development Server 将 ASP.NET 寄宿在一个本地进程中,并消除了必须安装 IIS 才能进行开发这一先决条件。下面从不同的方面来介绍
2、A2.0 技术。 类库 ASP.NET是微软 .NET framework整体 的一部分 ,它包含一组大量编程用的类 , 满足各种编程需要。因为 Visual Basic、 JScript和 C+这些编程语言的很多功能具有重叠性。举例来说,对于每一种语言,你必须包括存取文件系统、与数据库协同工作和操作字符串的方法。此外,这些语言包含相似的编程构造。都能够使用循环语句和条件语句。即使用 Visual Basic写的条件语句的语法和用 C+的不一样 ,程序的功能 也是相同的。对于多种语言来说维持这一功能需要很大的工作量。那么对所有的语言创建这种功能一次,然后把这个功能用在每一种语言中岂不是更容易。
3、然而 .NET类库不完全是那样。它含有大量的满足编程需要的类。举例来说, .NET类库不仅包含处理数据库访问的类和文件协同工作,操作文本和生成图像,而且还包含更多特殊的类用在正则表达式和处理 Web协议。此外 .NET framework, 也包含支持所有的基本变量数据类型的类 , 比如 : 字符串、整型、字节型、字符型和数组。 .NET framework是庞大的。它包含数以千计的类。 (超 过 3,400)幸运地是,类不是简单的堆在一起。 .NET framework的类被组织成有层次结构的命名空间。 一个命名空间包含一组逻辑的类。举例来说,涉及到与文件系统协同工作的类就集合在 Syste
4、m.IO命名空间中。 命名空间被组织成一个层次结构 (一棵逻辑树 )。树根就是 SYSTEM命名空间。这个命名空间包含基本的数据类型的所有的类 ,例如:字符串、数组,还包含提供随机数字和日期的类。 你通过完整的类的命名空间能唯一识别任何的类在 .NET framework中的位置 。例如 ,指定找到一个 the File class类,按如下操作 : System.IO.文件 System.IO指命名空间,而文件指定特定的类。 在默认情况下,在你的 ASP.NET页面中,类被包含在一个选定的命名空间中这些默认的命名空间使你在 ASP.NET中最常用到的。 System命名空间 -包含所有的基本
5、数据类型和其他有用的类,例如:那些关于产生随机数字和日期的类 。 System.Collections命名空间 -包含的类是标准的集合类,例如:哈希表,数组列表。 System.Collections.Specialized命名空间 -包含特殊的集合类, 例如:连接列表和字符串集合。 System.Configuration命名空间 -包括 Web.config files类。 System.Text命名空间 -包含编码,解码和操作字符串内容的类。 System.Text.RegularExpressions命名空间 -包含的是匹配正则表达式和替代操作类。 System.Web 命名空间 -工
6、作在万维网方面包含的是浏览器请求和服务器响应的类。 System.Web.Caching命名空间 -包含页面缓冲内容和自定义缓冲操作的类。 System.Web.Security命名空间 -包含执行验证和授权,例如:窗体和密码验证的类。 System.Web.SessionState命名空间 -包含执行保存状态的类。 System.Web.UI命名空间 -包含构建 ASP.NET页面的用户接口的类。System.Web.UI.HTMLControls命名空间 -包含 HTML控件的类。 System.Web.UI.WebControls命名空间 -包含 Web控件的类。 .Net支持 C#,J
7、Script.NET,C+和 Visual Basic中的任一种语言作为你的编程语言来完成 ASP.NET程序编写。但不管你使用什么语言开发 ASP.NET页面,你需要明白 ASP.NET在执行前必须编译,这就意味着 ASP.NET执行速度非常快。第一次请求 ASP.NET页面 ,页面被编译成一个 .NET类 ,这个类文件被保存在一个特殊的目录下,这个目录的名字叫 Temporary ASP.NET Files。对于一个 ASP.NET页面一个通信类文件也会出现在Temporary ASP.NET Files目录下。以后不管任何时候你请求那个同样的 ASP.NET页面,那个通信类文件就会执行。
8、 当 ASP.NET页面被编 译的时候,它没被直接地被编译成机器码而是被编译成了一个中间语言,名字叫 MSIL,所有 .NET可用的语言都被编译成这种中间语言。一个 ASP.NET页面不会被编译成本地机器码直到它被一个浏览器访问,在那个时间点包含在 Temporary ASP.NET Files目录下的类文件用 JIT编译器编译并且执行。 这些迷惑的方面体现在整 个过程中且都在后台运行,你必须要做的是用资源代码为你的 ASP.NET页面创建一个文本文件。 2.用 Web服务器控件创建窗体 用几个基本 Web控件来代替标准的 HTML窗体元素,例如 radiobuttons、 textboxes
9、, and listboxes.在 Web应用程序中可以用这些控件创建用户界面。 3.用验证控件做页面验证 传统地,当增加验证到页面中时,会面临一个严峻的选择。你可以添加窗体页面验证规则到你的服务器端代码,也可以添加验证规则到你的客户端代码。 写验证代码到客户端代码中的优势能够及时反馈到你的用户。例如,一个使用者忽略输入一个要求检验的字段,你能够及时的显示一个错误信息而不需要返回到服务器端解决。人们喜欢客户端的验证。它能产生一种很好的效果。然而,问题是它不与所有的浏览器兼容。 不是所有的浏览器支持 JavaScript、不同版本的浏览器的不同版本支持 JavaScript,所以客户端验证没有保
10、障。由于这个原因,许多开发者决定添加自定义验证到服务器端。因为服务器端代码能够和任何浏览器协同工作。这样的做法是更有安全保障。同时这些验证控件会自动地产生客户端代码和服务器端代码。如果一个浏览器有能力支持 JavaScript,客户端的验证脚本将会自动返回到浏览器。如果一个浏览器不支持 JavaScript,那个验证规则会自动在服务器端代码中执行。 控制字段 :RequiredFieldValidator控件 你可以用这个控件来检查在一个 Web窗体中是否为空,典型地,你和 TextBox控件一起使用这个控件。然而,这个控件也可以和其他的输入型控件结合使用,例如:RadioButtonList
11、控件 。 验证表达式 :RegularExpressionValidator控件 你能使用 RegularExpressionValidator控件来验证输入的值是否和定义的正则表达式相匹配。例如:你能使用这控件来检查一个用户是否输入一个合法的电子邮件地址,电话号码,用户名或密码。 比较值 :CompareValidator控 件 这个 CompareValidator 控件用于比较一个输入的数据和另外一个值是否相同。另外一个值可能是固定值,例如:一个特定的数字或者是输入到另一个控件中的一个值。 总结错误 :ValidationSummary控件 假想一个页面有 50个字段假如你仅仅用上部分讨
12、论的那些验证控件来显示错误看见一个错误在页面中将是很难的。例如:你可能需要滚动到第 48个页面字段来找到这个错误信息。 幸好,微软除了包含上面提到的控件还包括 ValidationSummary控件。你能用这个控件综合所有的错误信息在一个页面的上端或者你想要的任何一个地方。 4.先进的控件编程 保存浏览状态 默认地,几乎所有的 ASP.NET控件都会在先前的窗体中保留他们的属性值。举例来说,如果你输入文本到一个 Lebel标签上然后提交那个页面,当那个页面再次被访问时那个 Lebel标签的内容将会被保存下来。浏览状态的妙处是它不依赖任何的特定服务器或浏览器的属性。尤其,它不依赖 cookies
13、,session变量 、或应用程序变量。浏览状态在一个名叫做 VIEWSTATE的隐藏页面中执行,这个隐藏页面 自动创建 每个 Web窗体。当应用时 ,浏览状态能够在你的网站中产生艺术性的积极效果,例如:你在一个支持浏览状态的控件中显示数据库数据,你不需要每次都返回到需要反馈到服务器的数据库页面。它能够自动地保存页面里的数据状态。 显示和隐藏内容 假想把一个 form变成很多页面,以便一个人每次只看那个 form的一个部分。 可以设置单个控件和一组控件的 Visible and Enabled属性来隐藏和显示页面内容 。 使用 Visible and Enabled属性 每个控件 ,包括 HT
14、ML和 Web控件 ,有一个 Visible 属性 来决定那个控件是否可见。 当一个控件的 Visible是 false值,那个控件就不会在页面上显示;那个控件也不会进一步运行。 Web控件 (不是每个 HTML控件 )还有一个叫 Enabled的属性 。当 Enabled的属性是 false值,你用的浏览器是 IE4.0或更高的版本那个控件被封住了,也不起作用了,当用其他的浏览器的时候,如:网景浏览器那个控件不会被封,但它也是不起作用的。 5.Web部署项目 A2.0的魅力在于您在开发 Web应用程序时无需考虑打包和部署。当需要其他类时可向 App_Code目录添加一 个 .cs文件即可开始
15、编写。当希望将可本地化的字符串存储在资源文件中时,可向 App_GlobalResources目录添加一个 .resx文件并键入字符串。一切都顺顺当当,根本就不必考虑编译和部署方面的事情。 在准备进行部署时,有多种可选方案。最简单的方案是将文件复制到主运行服务器并按要求编译每一个文件(和在测试环境中一样)。第二种方案是使用_compiler.exe 实用工具将应用程序预编译为二进制版本,之后将只剩下要放到服务器上的一组程序集、静态内容和配置文件。第三种方案也使用_compiler.exe,但要创建一个可更新的二进制部署,其中 .as*x 文件保持不变(并且可修改),而所有代码文件都编译为二进制
16、程序集。 6. C#语言 C# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在 .NET Framework 上运行的各种安全、可靠的应用程序。使用 C#,您可以创建传统的 Windows 客户端应用程序、 XML Web services、分布式组件、客户端 - 服务器应用程序、数据库应用程序以及很多其他类型的程序。 Microsoft Visual C# 2005 提供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在 C# 语言版本 2.0 和 .NET Framework 的基础上加快应用程序的开发。 C# 语法表现力强,只有不到 90 个关键字,而
17、且简单易学。 C# 的大括号语法使任何熟悉 C、 C+ 或 Java 的人都可以立即上手。了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用 C# 高效地工作。 C# 语法简化了 C+ 的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问,这些都是 Java 所不具备的。 C# 还支持泛型方法和类型,从而提供了更出色的类型安全和性能。 C# 还提供了迭代器,允许集合类的实现者定义自定义的迭代行为,简化了客户端代码对它的使用。 作为一种面向对象的语言, C# 支持封装、继承和多态性概念。所有的变量和方法,包括 Main 方法(应用程序的入口点
18、),都封装在类定义中。类可能直接从一个父类继承,但它可以实现任意数量的接口。重写父类中的虚方法的各种方法要求 override 关键字作为一种避免意外重定义的方式。在 C# 中,结构类似于一个轻量类;它是一种堆栈分配的类型 ,可以实现接口,但不支持继承。 除了这些基本的面向对象的原理, C# 还通过几种创新的语言结构加快了软件组件的开发,其中包括: 封装的方法签名(称为委托),它实现了类型安全的事件通知。 属性 (Property),充当私有成员变量的访问器。 属性 (Attribute),提供关于运行时类型的声明性元数据。 内联 XML 文档注释。 在 C# 中,如果需要与其他 Window
19、s 软件(如 COM 对象或本机 Win32 DLL)交互,可以通过一个称为 “Interop” 的过程来实现。互操作使 C# 程序能够完 成本机 C+ 应用程序可以完成的几乎任何任务。在直接内存访问必不可少的情况下, C# 甚至支持指针和 “ 不安全 ” 代码的概念。 C# 的生成过程比 C 和 C+ 简单,比 Java 更为灵活。没有单独的头文件,也不要求按照特定顺序声明方法和类型。 C# 源文件可以定义任意数量的类、结构、接口和事件。 C# 程序在 .NET Framework 上运行,它是 Windows 的一个必要组件,包括一个称为公共语言运行时 (CLR) 的虚拟执行系统和一组统一
20、的类库。 CLR 是 Microsoft 的公共语言基础结构 (CLI) 的一个商业实现。 CLI 是一种国际标准,是用于创建语言和库在其中无缝协同工作的执行和开发环境的基础。 用 C# 编写的源代码被编译为一种符合 CLI 规范的中间语言 (IL)。 IL 代码与资源(如位图和字符串)一起作为一种称为程序集的可执行文件存储在磁盘上,通常具有的扩展名为 .exe 或 .dll。程序集包含清单,它提供关于程序集的类型、版本、区域性和安全要求等信息。 执行 C# 程序时,程序集将加载到 CLR 中,这可能会根据清单中的信息执行不同的操作。然后,如果符合安全要求, CLR 执行实 时 (JIT) 编
21、译以将 IL 代码转换为本机机器指令。 CLR 还提供与自动垃圾回收、异常处理和资源管理有关的其他服务。由 CLR 执行的代码有时称为 “ 托管代码 ” ,它与编译为面向特定系统的本机机器语言的 “ 非托管代码 ” 相对应。下图演示了 C# 源代码文件、基类库、程序集和 CLR 的编译时与运行时的关系。 语言互操作性是 .NET Framework 的一个关键功能。因为由 C# 编译器生成的 IL 代码符合公共类型规范 (CTS),因此从 C# 生成的 IL 代码可以与从 Visual Basic、Visual C+、 Visual J# 的 .NET 版本或者其他 20 多种符合 CTS 的语言中的任何一种生成的代码进行交互。单一程序集可能包含用不同 .NET 语言编写的多个模块,并且类型可以相互引用,就像它们是用同一种语言编写的。 除了运行时服务, .NET Framework 还包含一个由 4000 多个类组成的内容详尽的库,这些类被组织为命名空间,为从文件输入和输出到字符串操作、到 XML 分析、到 Windows 窗体控件的所有内容提供多种有用的功能。典型的 C# 应用程序使用 .NET Framework 类库广泛地处理常见的 “ 日常 ” 任务。