在ASP.NET中,发送到客户端浏览器中的网页是经过.NET框架中的基类动态生成的。这个基类就是Web页面框架中的Page类,而一个实例化的Page类就是一个Web窗体,也就是Web Forms。也因此说,一个ASP.NET页面,就是一个Web窗体。而作为窗体对象,就具有了属性、方法和事件,可以作为容器容纳其他控件。这个设计是继承了Visual Basic的优点:快速高效的搭建应用程序。因此,从此Web程序员可以像编写桌面应用程序一样的方便快捷地编写Web应用程序了,而无论是从桌面程序员转向Web程序员,还是Web程序员转向桌面程序员,都不需要改变太大的编程模式和习惯。
Web窗体是一个保存为后缀名为.aspx的文本文件,可以使用任何文本编辑器打开和编写它。我们知道ASP.NET是编译的运行机制,为了简化程序员的工作,一个.aspx页面不需要手工编译,而是在页面被调用的时候,由CLR自行决定是否编译。一般来说,下面两种情况下,.aspx页面会被重新编译:
1.aspx页面第一次被浏览器请求;
2.aspx页面被改写
由于.aspx页面可以被编译,所以.aspx页面具有组件一样的性能。这就使得.aspx页面至少比同样功能的.asp页面快了两倍!
任何.htm页面或是.html页面可以很容易的转化为.aspx页面,而.htm页面或是.html页面是不经过服务器编译的。如下面这个Hello.htm页面文件,它的HTML代码如下:
<HTML>
<HEAD>
<title>hello</title>
</HEAD>
<body>
Hello,I Love China!
</body>
</HTML>
在转化为.aspx文件时候,只需将后缀名.htm换成.aspx(即:hello.aspx)就完成了从.htm向.aspx的转换。通过浏览器浏览的效果一样,但是运行机制和效率是不一样的,Hello.aspx是一个Web窗体经过编译后的Page类动态的生成,而Hello.htm是直接调用文件。两个文件运行效果如4.1图和4.2图所示。
图4.1 Hello.htm页面运行结果
图4.2 Hello.aspx页面运行结果
要真正认识Web窗体,就要深入了解Web窗体的代码模型和事件模型。本章将在下面的两节中详细介绍Web窗体的代码模型以及事件模型。