ASP.NET 技术
1.构建 ASP.NET 页面
ASP.NET 和ASP.NET结构
ASP.NET 是微软.NET framework整体的一部分, 它包含一组大量的编程用的类,满足各种编程需要。 在下列的二个部分中, 你如何学会 ASP.NET 很适合的放在.NET framework, 和学会能在你的 ASP.NET 页面中使用语言。
.NET类库
假想你是微软。 假想你必须支持大量的编程语言-比如 Visual Basic 、 C# 和 C++. 这些编程语言的很多功能具有重叠性。 举例来说,对于每一种语言,你必须包括存取文件系统、与数据库协同工作和操作字符串的方法。
此外,这些语言包含相似的编程构造。 每种语言,举例来说,都能够使用循环语句和条件语句。 即使用 Visual Basic 写的条件语句的语法不与 用C++ 写的不一样,程序的功能也是相同的。
最后,大多数的编程语言有相似的数据变量类型。 以大多数的语言,你有设定字符串类型和整型数据类型的方法。举例来说, 整型数据最大值和最小值可能依赖语言的种类,但是基本的数据类型是相同的。
对于多种语言来说维持这一功能需要很大的工作量。 为什么继续再创轮子? 对所有的语言创建这种功能一次,然后把这个功能用在每一种语言中岂不是更容易。
.NET类库不完全是那样。 它含有大量的满足编程需要的类。举例来说,.NET类库包含处理数据库访问的类和文件协同工作,操作文本和生成图像。 除此之外,它包含更多特殊的类用在正则表达式和处理Web协议。
.NET framework,此外包含支持所有的基本变量数据类型的类,比如:字符串、整型、字节型、字符型和数组。
最重要地, 写这一本书的目的, .NET类库包含构建的 ASP.NET 页面的类。然而你需要了解当你构建.NET页面的时候能够访问.NET framework 的任意类。
理解命名空间
正如你猜测的, .NET framework是庞大的。 它包含数以千计的类(超过 3,400) 。幸运地,类不是简单的堆在一起。.NET framework的类被组织成有层次结构的命名空间。
ASP Classic Note
在先前的ASP中,你仅仅能够访问五个标准类。相比之下 ASP.NET 提供超过 3,400个类!
一个命名空间包含一组逻辑的类。举例来说,涉及到与文件系统协同工作的类就集合在System.IO 命名空间中。
命名空间被组织成一个层次结构(一棵逻辑树) 。 树根就是SYSTEM 命名空间。 这个命名空间包含基本的数据类型的所有的类,例如:字符串、数组,还包含提供随机数字和日期的类。
你通过完整的类的命名空间能唯一识别任何的类在.NET framework中的位置。 举例来说,指定找到一个the File class 类,按如下操:
System.IO.文件
System.IO指命名空间 ,而文件指定特定的类。
提示
你能够浏览.NET Framework所有的标准类的命名空间。通过.NET Framework 的参考文档可以浏览类库。
标准的 ASP.NET 命名空间
在默认情况下,在你的ASP.NET页面中,类被包含在一个选定的命名空间中这些默认的命名空间使你在ASP.NET中最常用到的。
System 命名空间- 包含所有的基本数据类型和其他有用的类,例如:那些关于产生随机数字和日期的类。
System.Collections命名空间- 包含的类是标准的集合类,例如:哈希表,数组列表。
System.Collections.Specialized 命名空间- 包含特殊的集合类,例如:连接列表和字符串集合。
System.Configuration 命名空间- 包括Web.config files类。
System.Text命名空间-包含编码,解码和操作字符串内容的类。
System.Text.RegularExpressions命名空间- 包含的是匹配正则表达式和替代操作类。
System.Web 命名空间-工作在万维网方面包含的是浏览器请求和服务器响应的类。
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 Framework -可用的语言
这一本书的目的, 你将会为以 Visual Basic 作为你的编程语言来完成你的 ASP.NET 页写程序编写。 它是 ASP.NET 页面的默认语言。虽然你在这一本书中一直用 Visual Basic, 但是,你也需要了解用其它的支持公共语言库的语言创建ASP.NET页面。除此之外,这包括 C#, JScript.NET和C++ 。
提示
本书所含的光碟包含 C# 源代码。
除微软之外的公司产生的几十个其他的语言已经能够和.NET framework兼容。 这些其他的语言的一些例子包括 Python、 SmallTalk 、 Eiffel和 COBOL。这就意味着假如你真的想, 你可以使用 COBOL 写 ASP.NET 页面。
不管你使用什么语言开发 ASP.NET 页面,你需要明白ASP.NET在执行前必须编译,这就意味着ASP.NET执行速度非常快。
你第一次请求 ASP.NET 页面, 页面被编译成一个.NET类, 这个类文件被保存在一个特殊的目录下这个目录的名字叫Temporary ASP.NET Files。对于一个ASP.NET页面一个通信类文件出现在Temporary ASP.NET Files目录下。以后不管任何时候你请求那个同样的ASP.NET页面,那个通信类文件就会执行。
当 ASP.NET 页面被编译的时候,它没被直接地被编译成机器码而是被编译成了一个中间语言,名字叫 (MSIL)所有.NET可用的语言都被编译成这种中间语言。
一个ASP.NET 页面不会被编译成本地机器码直到它被一个浏览器访问,在那个时间点包含在Temporary ASP.NET Files目录下的类文件用JIT编译器编译并且执行。
这些迷惑的方面体现在整个过程都在后台运行,你必须要做的是用资源代码为你的ASP.NET页面创建一个文本文件。.NET framework 为你处理完转换它为编译码这一困难工作。
典型ASP提示
VBScript 怎么样呢? 在 ASP.NET 之前, VBScript 是开发动态页面最流行的语言。
ASP.NET 不支持VBScript ,而且这是好消息。 Visual Basic 是一个 VBScript 的超集,意味着 Visual Basic 相对于 VBScript有更多的功能。 因此, 你用 Visual Basic 有更丰富的函数和语句供你使用。
此外,不像 VBScript , Visual Basic 是一种被编译的语言。 这意味着如果你使用 Visual Basic 重写相同的 VBScript代码感觉会更容易一些。
假如你过去只用VBScript而不用 Visual Basic,也不用担心。 因为 VBScript 如此接近 Visual Basic, 你将会发现在这二种语言之间的转变是很容易的。
提示
在.NET framework中,微软包括一个名叫 IL Disassembler的有趣的工具。在临时的ASP.NET文件目录中你能使用这个工具查看没有装配的ASP.NET 类的代码。 它列出了类的所有方法和属性使你能够浏览中间代码。
正如在这章讨论的这个工具也可以用于操作ASP.NET控件。 举例来说,你能使用 IL Disassembler 浏览 TextBox 控件的中间代码。(位于在一个叫做 System.Web.dll 的文件中)
介绍 ASP.NET 控件
ASP.NET 控件为你的Web应用程序提供动态和交互的用户接口。这些控件能够使你的网站的使用者看见和交互。 举例来说,你能使用控件建立 HTML 窗体元素,交互式日历, 而且可以滚动标题广告。
ASP.NET 控件和 HTML 内容共存。 典型地,你用通常的 HTML 创建你的网页的静态区域和用 ASP.NET 控件创建网页的动态区域。
了解 ASP.NET 控件是怎么工作的?最好的方法是看一个简单的Web应用窗体页面。
添加ASP.NET页面的代码
第二个难点就是ASP.NET页面的代码,他是确切的页面的程序代码,在你添加的程序用户处理控件也页面事件。
如果一个使用者单击 HTML窗体中的Button按钮, 举例来说,那个按钮就会响应一个事件 (单击事件) 。 典型地,你想添加代码响应这个事件到页面中。 举例来说,当某人单击Button按钮控件的时候,你可以保存窗体数据到一个文件或者数据库。
控件不是唯一的能相应事件的事物。 当它被请求的时候一个ASP.NET 页面每次都能够响应几个事件。 举例来说,每当你请求一个页面,页面的初始化事件就会被触发。 每当初始化事件发生的时候,你能够添加代码到页面中来执行。
2. 用Web服务器控件创建窗体
构建灵活窗体
你用几个基本Web控件来代替标准的 HTML 窗体元素,例如radio buttons、text boxes, and list boxes. 你能够用这些控件为你的Web应用程序在你的ASP.NET页面中创建用户界面。 下面的部分为这些Web控件提供了详细的提纲和程序源代码。
控制页面浏览
在下列的部分中,你学会如何控制一个用户从一个ASP.NET页面转到另一个页面。首先,你学会怎么把一个HTML窗体链接到另一个页面来获取信息。 下一步,你学会用Redirect()方法自动让一个用户浏览一个新的页面。 最后,你学会用超级链接控件怎么把页面连在一起。
对控件应用格式
在下列的部分中,你学会该如何创建更有吸引力的Web窗体。 首先,你浏览一下针对所有Web控件格式属性他们是基本控件类的格式属性。 然后,你学会在Web控件上应用样式表风格。
3. 用验证控件做页面验证
使用客户端验证
传统地,当增加验证到他们的页面中时,他们会面临一个严峻的选择。 你可以添加窗体页面验证规则到你的服务器端代码,或者是添加验证规则到你的客户端代码。
写验证代码到客户端代码中的优势能够及时反馈到你的用户。 举例来说,一个使用者忽略在一个要求检验的字段中输入一个值,你能够及时的显示一个错误信息而不需要返回到服务器端解决。
人们喜欢客户端的验证。 它看起来很棒而且产生一种比较好的效果。 然而,问题是它不与所有的浏览器兼容。 不是所有的浏览器支持 JavaScript、不同版本的浏览器的不同版本支持 JavaScript,所以客户端验证没有保障。
由于这个原因,许多开发者在过去决定添加自定义验证到服务器端。因为服务器端代码能够和任何浏览器协同工作。就这样的做法更有安全的保障。
幸运地,正如在章节讨论的这些验证控件不会强迫你做困难的选择。 这些验证控件会自动地产生客户端代码和服务器端代码。 如果一个浏览器有能力支持JavaScript ,客户端的验证脚本将会自动返回到浏览器。 如果一个浏览器不支持 JavaScript,那个验证规则会自动在服务器端代码中执行。
然而你需要注意的是,客户端的验证仅仅能够工作在IE4.0或更高的版本。 尤其,正如这一章讨论的客户端脚本不可能在任意本本的浏览器中运行。
控制字段: RequiredFieldValidator 控件
你用这个控件来检查在一个Web窗体中是否为空, 典型地,你和 TextBox 控件一起使用这个控件。 然而,这个控件也可以用在其他的输入型控件,例如:RadioButtonList.控件。
验证表达式: RegularExpressionValidator 控件
你能使用 RegularExpressionValidator 控件来验证输入的值是否和定义的正则表达式相匹配。 例如:你能使用这控件来检查一个用户是否输入一个合法的电子邮件地址,电话号码,用户名或密码。怎样用一个正则表达式来完成这些验证任务将会在下面的例子中一一列出。
比较值: CompareValidator 控件
这个CompareValidator 控件用于比较一个输入的数据和另外一个值是否相同。另外一个值可能是固定值,例如:一个特定的数字或者是输入到另一个控件中的一个值。
总结错误: ValidationSummary 控件
假想一个页面有50个字段假如你仅仅用上部分讨论的那些验证控件来显示错误看见一个错误在页面中将是很难的。 例如:你可能需要滚动到第48个页面字段来找到这个错误信息。
幸好,微软除了包含上面提到的控件还包括 ValidationSummary 控件。 你能用这控件综合所有的错误信息在一个页面的上端或者你想要的任何一个地方。
4. 先进的控件编程
保存浏览状态
默认地,几乎所有的 ASP.NET 控件都会在先前的窗体中保留他们的属性值。 举例来说,如果你输入文本到一个Lebel标签上然后提交那个页面,当那个页面再次被访问那个Lebel标签的内容将会被保存下来。
浏览状态的妙处是它不依赖任何的特定服务器或浏览器的属性。 尤其,它不依赖cookies, session变量、或应用程序变量。 浏览状态在一个名叫做VIEWSTATE的隐藏页面中执行,这个隐藏页面自动创建每个Web窗体。
当灵活的应用时, 浏览状态能够在你的网站中产生艺术性的和积极的效果,例如:如果你在一个支持浏览状态的控件中显示数据库数据,你不需要每次都返回到需要反馈到服务器的数据库页面。 你能够自动地保存页面里的数据状态。
显示和隐藏内容
假想你正在用一个可选择的部分创造页面。 举例来说,假想你正在创造一种在线纳税系统,而且你想要显示或者隐藏一个包含适用于已婚的税文件编档员的问题的部分。
或者, 假想你想要添加一个帮助按钮到网站上去。 你可能想要隐藏或者显示完成依靠用户参考的问题的详细说明。
最后,假想你想要把一个tax form 变成很多页面,以便一个人每次只看那个tax form的一部分。
在下列的部分中,你学会用属性设置在一个窗体中来隐藏或显示控件。 你学会用单个控件和一组控件设置Visible and Enabled属性来隐藏和显示页面内容。
使用Visible and Enabled属性
每个控件,包括 HTML 和Web控件,有一个Visible 属性来决定那个控件是否可见。 当一个控件的Visible是false值,那个控件就不会在页面上显示;那个控件也不会进一步运行。
Web控件 (不是每个HTML 控件) 还有一个叫Enabled的属性。当Enabled的属性是false值,你用的浏览器是IE4.0或更高的版本那个控件被封住了,也不起作用了,当用其他的浏览器的时候,如:网景浏览器那个控件不会被封,但它也是不起作用的。
使浏览状态失效
在特定的环境中,你可能想要对一个单独的控件或ASP.NET页面作为一个整体的浏览状态失效。 举例来说, 你可能使用一个有包含许多数据的控件.(假想一个RadioButtonList 控件控制1,000 个选项)假如你担心页面数据会大大的降低页面的显示速度,你可能不想要加载数据到隐藏的VIEWSTATE页面字段。
使用丰富页面的控件
在下列的部分中,你学会在ASP.NET Framework怎样使用三种特征控件。学会该如何使用日历控件显示交互式日历,AdRotator控件显示滚动的广告,HTMLInputFile控件来接受文件的上传。
4 外文文献原文2
ASP.NET Technique
1. Building ASP.NET Pages
ASP.NET and the .NET Framework
ASP.NET is part of Microsoft's overall .NET framework, which contains a vast set of programming classes designed to satisfy any conceivable programming need. In the following two sections, you learn how ASP.NET fits within the .NET framework, and you learn about the languages you can use in your ASP.NET pages.
The .NET Framework Class Library
Imagine that you are Microsoft. Imagine that you have to support multiple programming languages—such as Visual Basic, JScript, and C++. A great deal of the functionality of these programming languages overlaps. For example, for each language, you would have to include methods for accessing the file system, working with databases, and manipulating strings.
Furthermore, these languages contain similar programming constructs. Every language, for example, can represent loops and conditionals. Even though the syntax of a conditional written in Visual Basic differs from the syntax of a conditional written in C++, the programming function is the same.
Finally, most programming languages have similar variable data types. In most languages, you have some means of representing strings and integers, for example. The maximum and minimum size of an integer might depend on the language, but the basic data type is the same.
Maintaining all this functionality for multiple languages requires a lot of work. Why keep reinventing the wheel? Wouldn't it be easier to create all this functionality once and use it for every language?
The .NET Framework Class Library does exactly that. It consists of a vast set of classes designed to satisfy any conceivable programming need. For example, the .NET framework contains classes for handling database access, working with the file system, manipulating text, and generating graphics. In addition, it contains more specialized classes for performing tasks such as working with regular expressions and handling network protocols.
The .NET framework, furthermore, contains classes that represent all the basic variable data types such as strings, integers, bytes, characters, and arrays.
Most importantly, for purposes of this book, the .NET Framework Class Library contains classes for building ASP.NET pages. You need to understand, however, that you can access any of the .NET framework classes when you are building your ASP.NET pages.
Understanding Namespaces
As you might guess, the .NET framework is huge. It contains thousands of classes (over 3,400). Fortunately, the classes are not simply jumbled together. The classes of the .NET framework are organized into a hierarchy of namespaces.
ASP Classic Note
In previous versions of Active Server Pages, you had access to only five standard classes (the Response, Request, Session, Application, and Server objects). ASP.NET, in contrast, provides you with access to over 3,400 classes!
A namespace is a logical grouping of classes. For example, all the classes that relate to working with the file system are gathered together into the System.IO namespace.
The namespaces are organized into a hierarchy (a logical tree). At the root of the tree is the System namespace. This namespace contains all the classes for the base data types, such as strings and arrays. It also contains classes for working with random numbers and dates and times.
You can uniquely identify any class in the .NET framework by using the full namespace of the class. For example, to uniquely refer to the class that represents a file system file (the File class), you would use the following:
System.IO.File
System.IO refers to the namespace, and File refers to the particular class.
NOTE
You can view all the namespaces of the standard classes in the .NET Framework Class Library by viewing the Reference Documentation for the .NET Framework.
Standard ASP.NET Namespaces
The classes contained in a select number of namespaces are available in your ASP.NET pages by default. (You must explicitly import other namespaces.) These default namespaces contain classes that you use most often in your ASP.NET applications:
System— Contains all the base data types and other useful classes such as those related to generating random numbers and working with dates and times.
System.Collections— Contains classes for working with standard collection types such as hash tables, and array lists.
System.Collections.Specialized— Contains classes that represent specialized collections such as linked lists and string collections.
System.Configuration— Contains classes for working with configuration files (Web.config files).
System.Text— Contains classes for encoding, decoding, and manipulating the contents of strings.
System.Text.RegularExpressions— Contains classes for performing regular expression match and replace operations.
System.Web— Contains the basic classes for working with the World Wide Web, including classes for representing browser requests and server responses.
System.Web.Caching— Contains classes used for caching the content of pages and classes for performing custom caching operations.
System.Web.Security— Contains classes for implementing authentication and authorization such as Forms and Passport authentication.
System.Web.SessionState— Contains classes for implementing session state.
System.Web.UI— Contains the basic classes used in building the user interface of ASP.NET pages.
System.Web.UI.HTMLControls— Contains the classes for the HTML controls.
System.Web.UI.WebControls— Contains the classes for the Web controls.
.NET Framework-Compatible Languages
For purposes of this book, you will write the application logic for your ASP.NET pages using Visual Basic as your programming language. It is the default language for ASP.NET pages. Although you stick to Visual Basic in this book, you also need to understand that you can create ASP.NET pages by using any language that supports the .NET Common Language Runtime. Out of the box, this includes C#, JScript.NET, and the Managed Extensions to C++.
NOTE
The CD included with this book contains C# versions of all the code samples.
Dozens of other languages created by companies other than Microsoft have been developed to work with the .NET framework. Some examples of these other languages include Python, SmallTalk, Eiffel, and COBOL. This means that you could, if you really wanted to, write ASP.NET pages using COBOL.
Regardless of the language that you use to develop your ASP.NET pages, you need to understand that ASP.NET pages are compiled before they are executed. This means that ASP.NET pages can execute very quickly.
The first time you request an ASP.NET page, the page is compiled into a .NET class, and the resulting class file is saved beneath a special directory on your server named Temporary ASP.NET Files. For each and every ASP.NET page, a corresponding class file appears in the Temporary ASP.NET Files directory. Whenever you request the same ASP.NET page in the future, the corresponding class file is executed.
When an ASP.NET page is compiled, it is not compiled directly into machine code. Instead, it is compiled into an intermediate-level language called Microsoft Intermediate Language (MSIL). All .NET-compatible languages are compiled into this intermediate language.
An ASP.NET page isn't compiled into native machine code until it is actually requested by a browser. At that point, the class file contained in the Temporary ASP.NET Files directory is compiled with the .NET framework Just in Time (JIT) compiler and executed.
The magical aspect of this whole process is that it happens automatically in the background. All you have to do is create a text file with the source code for your ASP.NET page, and the .NET framework handles all the hard work of converting it into compiled code for you.
ASP CLASSIC NOTE
What about VBScript? Before ASP.NET, VBScript was the most popular language for developing Active Server Pages.
ASP.NET does not support VBScript, and this is good news. Visual Basic is a superset of VBScript, which means that Visual Basic has all the functionality of VBScript and more. So, you have a richer set of functions and statements with Visual Basic.
Furthermore, unlike VBScript, Visual Basic is a compiled language. This means that if you use Visual Basic to rewrite the same code that you wrote with VBScript, you can get better performance.
If you have worked only with VBScript and not Visual Basic in the past, don't worry. Since VBScript is so closely related to Visual Basic, you'll find it easy to make the transition between the two languages.
NOTE
Microsoft includes an interesting tool named the IL Disassembler (ILDASM) with the .NET framework. You can use this tool to view the disassembled code for any of the ASP.NET classes in the Temporary ASP.NET Files directory. It lists all the methods and properties of the class and enables you to view the intermediate-level code.
This tool also works with all the ASP.NET controls discussed in this chapter. For example, you can use the IL Disassembler to view the intermediate-level code for the TextBox control (located in a file named System.Web.dll).
Introducing ASP.NET Controls
ASP.NET controls provide the dynamic and interactive portions of the user interface for your Web application. The controls render the content that the users of your Web site actually see and interact with. For example, you can use controls to create HTML form elements, interactive calendars, and rotating banner advertisements.
ASP.NET controls coexist peacefully with HTML content. Typically, you create the static areas of your Web pages with normal HTML content and create the dynamic or interactive portions with ASP.NET controls.
The best way to understand how ASP.NET controls work in an HTML page is to look at a simple Web Forms Page.
Adding Application Logic to an ASP.NET Page
The second building block of an ASP.NET page is the application logic, which is the actual programming code in the page. You add application logic to a page to handle both control and page events.
If a user clicks a Button control within an HTML form, for example, the Button control raises an event (the Click event). Typically, you want to add code to the page that does something in response to this event. For example, when someone clicks the Button control, you might want to save the form data to a file or database.
Controls are not the only things that can raise events. An ASP.NET page itself raises several events every time it is requested. For example, whenever you request a page, the page's Load event is triggered. You can add application logic to the page that executes whenever the Load event occurs.
2. Building Forms with Web Server Controls
Building Smart Forms
You use several of the basic Web controls to represent standard HTML form elements such as radio buttons, text boxes, and list boxes. You can use these controls in your ASP.NET pages to create the user interface for your Web application. The following sections provide detailed overviews and programming samples for each of these Web controls.
Controlling Page Navigation
In the following sections, you learn how to control how a user moves from one ASP.NET page to another. First, you learn how to submit an HTML form to another page and retrieve form information. Next, you learn how to use the Redirect() method to automatically transfer a user to a new page. Finally, you learn how to link pages together with the HyperLink control.
Applying Formatting to Controls
In the following sections, you learn how to make more attractive Web forms. First, you look at an overview of the formatting properties common to all Web controls; they are the formatting properties of the base control class. Next, you learn how to apply Cascading Style Sheet styles and classes to Web controls.
3. Performing Form Validation with Validation Controls
Using Client-side Validation
Traditionally, Web developers have faced a tough choice when adding form validation logic to their pages. You can add form validation routines to your server-side code, or you can add the validation routines to your client-side code.
The advantage of writing validation logic in client-side code is that you can provide instant feedback to your users. For example, if a user neglects to enter a value in a required form field, you can instantly display an error message without requiring a roundtrip back to the server.
People really like client-side validation. It looks great and creates a better overall user experience. The problem, however, is that it does not work with all browsers. Not all browsers support JavaScript, and different versions of browsers support different versions of JavaScript, so client-side validation is never guaranteed to work.
For this reason, in the past, many developers decided to add all their form validation logic exclusively to server-side code. Because server-side code functions correctly with any browser, this course of action was safer.
Fortunately, the Validation controls discussed in this chapter do not force you to make this difficult choice. The Validation controls automatically generate both client-side and server-side code. If a browser is capable of supporting JavaScript, client-side validation scripts are automatically sent to the browser. If a browser is incapable of supporting JavaScript, the validation routines are automatically implemented in server-side code.
You should be warned, however, that client-side validation works only with Microsoft Internet Explorer version 4.0 and higher. In particular, the client-side scripts discussed in this chapter do not work with any version of Netscape Navigator.
Requiring Fields: The RequiredFieldValidator Control
You use RequiredFieldValidator in a Web form to check whether a control has a value. Typically, you use this control with a TextBox control. However, nothing is wrong with using RequiredFieldValidator with other input controls such as RadioButtonList.
Validating Expressions: The RegularExpressionValidator Control
You can use RegularExpressionValidator to match the value entered into a form field to a regular expression. You can use this control to check whether a user has entered, for example, a valid e-mail address, telephone number, or username or password. Samples of how to use a regular expression to perform all these validation tasks are provided in the following sections.
Comparing Values: The CompareValidator Control
The CompareValidator control performs comparisons between the data entered into a form field and another value. The other value can be a fixed value, such as a particular number, or a value entered into another control.
Summarizing Errors: The ValidationSummary Control
Imagine that you have a form with 50 form fields. If you use only the Validation controls discussed in the previous sections of this chapter to display errors, seeing an error message on the page might be difficult. For example, you might have to scroll down to the 48th form field to find the error message.
Fortunately, Microsoft includes a ValidationSummary control with the Validation controls. You can use this control to summarize all the errors at the top of a page, or wherever else you want.
4. Advanced Control Programming
Working with View State
By default, almost all ASP.NET controls retain the values of their properties between form posts. For example, if you assign text to a Label control and submit the form, when the page is rendered again, the contents of the Label control are preserved.
The magic of view state is that it does not depend on any special server or browser properties. In particular, it does not depend on cookies, session variables, or application variables. View state is implemented with a hidden form field called VIEWSTATE that is automatically created in every Web Forms Page.
When used wisely, view state can have a dramatic and positive effect on the performance of your Web site. For example, if you display database data in a control that has view state enabled, you do not have to return to the database each time the page is posted back to the server. You can automatically preserve the data within the page's view state between form posts.
Displaying and Hiding Content
Imagine that you are creating a form with an optional section. For example, imagine that you are creating an online tax form, and you want to display or hide a section that contains questions that apply only to married tax filers.
Or, imagine that you want to add an additional help button to the tax form. You might want to hide or display detailed instructions for completing form questions depending on a user's preferences.
Finally, imagine that you want to break the tax form into multiple pages so that a person views only one part of the tax form at a time.
In the following sections, you learn about the properties that you can use to hide and display controls in a form. You learn how to use the Visible and Enabled properties with individual controls and groups of controls to hide and display page content.
Using the Visible and Enabled Properties
Every control, including both HTML and Web controls, has a Visible property that determines whether the control is rendered. When a control's Visible property has the value False, the control is not displayed on the page; the control is not processed for either pre-rendering or rendering.
Web controls (but not every HTML control) have an additional property named Enabled. When Enabled has the value False and you are using Internet Explorer version 4.0 or higher, the control appears ghosted and no longer functions. When used with other browsers, such as Netscape Navigator, the control might not appear ghosted, but it does not function.
Disabling View State
In certain circumstances, you might want to disable view state for an individual control or for an ASP.NET page as a whole. For example, you might have a control that contains a lot of data (imagine a RadioButtonList control with 1,000 options). You might not want to load the data into the hidden __VIEWSTATE form field if you are worried that the form data would significantly slow down the rendering of the page.
Using Rich Controls
In the following sections, you learn how to use three of the more feature-rich controls in the ASP.NET framework. You learn how to use the Calendar control to display interactive calendars, the AdRotator control to display rotating banner advertisements, and the HTMLInputFile control to accept file uploads.