Web 窗体代码模型

楼主
Web 窗体代码模型
Web 窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本)和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。视觉元素在一个 .aspx 文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件(.aspx.vb 或 .aspx.cs)。

也可以在同一文件中创建视觉元素和代码,该文件有时称作“单文件”Web 窗体页。有关详细信息,请参阅以下的“单文件 Web 窗体页”。

ASP.NET 页类
虽然一个 Web 窗体页由两个单独的文件组成,但这两个文件在应用程序运行时形成了一个整体。项目中所有 Web 窗体的代码隐藏类文件都被编译成动态链接库 (.dll) 文件。Web 窗体 .aspx 页文件也会被编译,但编译的方式稍有不同。当用户第一次浏览到 .aspx 页时,ASP.NET 自动生成表示该页的 .NET 类文件,并将其编译成另一个 .dll 文件。为 .aspx 页生成的类从被编译成项目 .dll 文件的代码隐藏类继承。

只要 Web 窗体页受到请求,此 .dll 文件就会在服务器上运行。在运行时,此 .dll 文件通过动态创建输出并将其发送回浏览器或客户端设备来处理传入请求和响应。

如果该页像通常在情况下一样包含服务器控件,派生的页类则用作控件的容器。控件的实例在运行时创建,并且同样地为浏览器或客户端设备呈现输出。

对于熟悉 Active Server Pages (ASP) 的开发人员,ASP.NET 页框架模型向他们展现了一些新的内容。ASP 模型是通过脚本代码扩展的 HTML 模型。ASP 页由脚本代码(如 ECMAScript (JScript, JavaScript) 或 VBScript)组成,脚本代码与静态 HTML 共同位于同一文件中。ASP 分析器读取该页,对其进行解释,并仅运行脚本代码来获取输出结果。在将输出发送回浏览器或客户端设备之前,ASP 会合并脚本代码的输出和在该页中发现的静态 HTML 输出。

在 ASP.NET Page 类模型中,整个 Web 窗体页实际上是一个可执行程序,该程序生成将被发送回浏览器或客户端设备的输出。在此模型中,该页会像其他组件一样经历一系列处理阶段:初始化、处理和处置,但有两处不同:

每次调用该页时,页类都会执行这些步骤。每当发生到服务器的往返行程时,都会对该页进行初始化、处理和处置。
页类有一个唯一的阶段:呈现。呈现在页生命周期结束发生,输出将在此阶段生成。
注意 为了提高效率,可能会缓存重新创建页所必需的信息,但此操作独立于页的生命周期。
从页类派生
当系统为 Web 窗体页创建页和类文件时,它将生成从基 Page 类继承的代码。例如,如果创建新的 Web 窗体页并将其命名为 WebPage1,则会从 System.Web.UI.Page 派生一个名为 WebPage1 的新类。

根据您是否已选择将 Visual Basic 或 Visual C# 用于部署,您将得到以下代码行之一:

' Visual Basic
Public Class WebForm1
    Inherits System.Web.UI.Page
// C#
public class WebForm1 : System.Web.UI.Page
.aspx 页文件又从派生的 WebPage1 类继承。下图阐释了基 Page 类、派生的类文件和 .aspx 文件的关系。

Web 窗体页结构和 Page 基类


[url=../images/upload_mm/2003/04/17/783253906250.bmp][img]../images/upload_mm/2003/04/17/783253906250s.gif[/img][/url]
由于 .aspx 文件在用户浏览该页时会动态地进行编译,它与类文件的关系将通过页顶部的脚本指令来建立。

单文件 Web 窗体页
除了由 .aspx 文件和单独的类文件组成的页之外,ASP.NET 结构还支持“单文件”模型,在此模型中,UI 元素和代码位于同一文件中。单文件 Web 窗体页在功能上与由两个文件组成的页非常类似。例如,在两种类型的页上使用的是相同的控件。用户仍使用相同的文件扩展名 .aspx 来请求页,页仍使用服务器端代码来运行,并且页会以流的形式将 HTML 发送到客户端。单文件页具有易于部署的优点。

单文件页的处理方式存在一些不同之处:

不会将该页的代码编译成一个单独的类,然后从该类派生 .aspx 文件。相反,.aspx 文件将直接从 Page 类派生。
当部署该页时,由于源代码在物理上位于 .aspx 文件中,所以源代码将与 Web 窗体页一起部署。(用户看不到该代码——仅向用户发送该页运行时所呈现的结果。)

电脑版 Page created in 0.0938 seconds with 4 queries.