软件行业的一个趋势是将许多编写代码的工作量转移到基本平台的基础结构。众多开发平台只是要求 开发人员使用相对宽松的语法,在较高级别上对所需的信息进行描述,而不是按照一组严格的语法规则进 行逐字节的硬编码。现在,开发人员经常使用 XML 语言来描述所需的结果,通过编译器或运行时引擎对 内容进行分析,并将其处理成传统的可执行代码。
例如,Windows Presentation Foundation(.NET Framework 3.0 的支柱之一)使用 XAML 作为 基于 XML 的呈现语言,以描述表单用户界面。Microsoft AJAX 库(以前代码名为 ASP.NET“Atlas”的系统的一部分)使用其 XML-Script 元语言将相同原则应用于富文本网页 (尽管从技术上看,XML-Script 不属于其核心发布内容,而是作为非官方示例技术进行共享)。XML- Script 是声明性布局语言,它将 HTML 元素和脚本组合在一起,形成虚拟的客户端控件。最终,XML- Script 为客户端页面引入了逻辑处理和功能。
使用声明性语言创作网页和表单有几个优点。通过 采用此方式,服务器端组件可以更方便地生成页面和表单,而不必生成实际的 Visual Basic、C# 或 JavaScript 代码。此外,对于诸如 Visual Studio 这样的创作工具,声明性标记就其本质而言 更容易进行设计。从体系结构角度来看,采用声明标记的方式,所指定的是页面元素的行为,而不是这些 元素如何实现这类行为。这样,就可以创建更多的抽象层。
第一个利用这种模型的具体编程环境 是 ASP.NET(从版本 1.0 开始)。正如大多数 Web 开发人员现在所知的,ASP.NET 页通常是在一、两个 文件中进行编写的:一个 .aspx 标记文件和一个可选的代码隐藏文件。代码隐藏文件中包含了以任何受 支持的编程语言(通常是 Visual Basic 或 C#)所编写的类文件。.aspx 标记文件包含形成页面结构的 HTML 标记、ASP.NET 控制标记和文字(它还可以包含代码)。此文本将在运行时进行分析,并转换成页 类。这样的页类,在与代码隐藏类和一些系统生成的代码组合之后,共同形成可执行代码,以处理任何提 交的数据,并生成响应,然后将其发送回客户端。
虽然这个总体模型为绝大多数 ASP.NET 开发人 员所知,但还是存在很多只有少部分开发人员有深入了解的“黑洞”。MSDN、相关书籍 和在线文章对页面机制的各个方面进行了解释,但仍然缺少对页面内部机制进行的全面而统一的介绍。如 果看一看 ASP.NET 页的 HTML 源代码,就会发现很多您可能几乎不了解的隐藏字段和自动插入的 JavaScript 代码块。但是,正是在这些字段和代码块的支持下,网页才能正常工作。在本专栏中,我将 分析 ASP.NET 页所生成的客户端源代码。我不单要讨论如视图状态这类大家熟悉的隐藏字段,而且还会 涉及到一些少有人知的隐藏字段,例如,控件状态、事件验证、事件目标和参数,以及系统提供的脚本代 码。
我在此处讨论的很多实现细节均是针对当前的 ASP.NET 版本而言的。这些细节在将来的版本 中会有所更改(相对于过去的版本已有了更改),因此您不应当构建任何依赖于不成文细节的运行代码。