一、ASP.NET页面
一个ASP.NET页面(或者称为ASP.NET窗体)由以下几个部分组成:
1、指令
(包括@Page、@Import、@OutputCache、@Implements、@Register、@Master、@Control…)
2、Head(HTML文档头)
3、Body(HTML文档体)
窗体元素(form)
控件(html标记、服务器控件标记)
4、代码(客户端代码,服务端代码)
每个ASP.NET窗体页都包含网页指令。使用这些指令可以控制Web窗体页的行为。基本上,这些指令都是用于编译时的开关选项。网页指令都是以@开头的。其一般格式如下:
<%@ Page Language="C#" % CodeFile=”Default.aspx” Inherit=”Default”>
这些指令较多,而且每一个指令又有许多属性,我们采取使用到哪个讲哪个的策略。这里我们首先介绍最重要的@Page指令,它说明该.aspx页面是一个HTML窗体。Language属性说明该页面处理程序使用的是哪种语言,CodeFile属性说明该页面的程序存放在哪个代码隐藏页文件中,Inherit属性说明该页面是由哪个类负责处理的。如:
<%@ Page Language="C#" % CodeFile=”Default.aspx” Inherit=”Default”>
<form>元素:如果页面包含允许用户交互并提交的控件,则该页面必须包含一个form元素。form元素必须包含runat属性,其属性值设置为server。对于ASP.NET而言一个页面有且只能一个<form runat=”server”>标记。
二、ASP.NET页面代码模型
ASP.NET中每一个页面都有一个类负责对页面的各种操作进行处理,因此.Net Framework把常用的通用功能抽取出来形成一个基类:System.Web.UI.Page。我们所编写的每一个ASP.NET页面都应当从这个类继承。
上述单元一讲到:ASP.NET页面包括标记和代码。根据标记和代码的组织方式不同,ASP.NET页面的代码模型主要的有两种:
1、内置代码模型:标记服务器端元素以及事件处理代码全都位于同一个.aspx文件中。在对该页进行编译时,编译器将生成和编译一个从Page基类派生的新类。生成的类将编译成程序集,并将该程序集加载到应用程序域,然后对该页类进行实例化,并执行该页类以将输出内容呈现到浏览器。图1为内置代码模型页面中的页类的继承模型。
其特点是:
1)页面内代码如果不多,便于程序员阅读;如果代码较多,不便维护;
2)容易部署和管理;
3)文件之间没有依赖性,方便对文件改名。
2、后台代码(代码隐藏)模型:页面中的标记和服务器端元素(包括控件声明)位于.aspx文件中,而页代码则位于单独的代码隐藏文件(.aspx.cs)中。该代码隐藏文件包含一个分部类,即具有关键字partial的类声明,以表示该代码隐藏文件只包含构成该页的完整类的全体代码的一部分。在分部类中,添加应用程序要求该页所具有的代码,此代码通常由事件处理程序构成,但是也可以包括用户需要的任何方法或属性。
其特点是:
1)标记和代码分离,便于页面设计和开发分工合作;
2)便于代码重用。
代码隐藏页的继承模型如图2所示 :
(1)代码隐藏文件包含一个继承自基页类的分部类。基页类可以是Page类,也可以是从Page派生的其他类。
(2).aspx文件在@Page指令中包含一个指向代码隐藏分部类的Inherits属性。
(3)在对该页进行编译时,ASP.NET将基于.aspx的文件生成一个分部类,生成的部分类文件包含页控件的声明、事件注册等。使用此分部类,可以将代码隐藏文件用作完整类的一部分,而无须显式声明控件。
(4)步骤(3)中生成的部分类和.aspx.cs文件中的部分类代码合并,生成该页所需的完整代码,编译成程序集,运行该程序集可以将输出呈现到浏览器。