由于.NET框架的面相对象特性,ASP.NET打开了Web开发的新世界。尽管这个新世界要求开发者掌握几个难学的技术以及一种考虑Web开发的新思路,但付出会带来成倍的受益——你的网站将会得到更好的可重用性和可维护性。
在Web开发中使用这些面向对象原则就牵涉到创建页框架(page framework),页框架也可以说是你的网站中页的一个基类。我将在本文说明为什么以及如何在ASP.NET中开发页框架。
当在Visual Studio .NET中创建一个Web页(经常称之为form,即表单)时,这页实际上包括两个文件,.aspx文件包含有HTML代码,而.vb或者.cs文件则包含该页中部分可执行代码(常常称之为codebehind)。Page分别通过Codebehind和Inherits属性指示.aspx文件指向codebehind文件以及文件中的类。
然后,开发者就可以在VS.NET中建立项目了,ASP.NET在运行时产生与.aspx页耦合的codebehind部件(DLL),它用来创建运行时的Page类(Page类在处理对页的请求时实际运行)。
Codebehind文件包含一个从Page类继承来得、位于System.Web.UI名字空间的类——这一点常常被开发者忽视。这个类(它最终继承自一个名为Control的类)提供所有的事件、方法和属性,ASP.NET使用这些事件、方法和属性来在运行时向浏览器提供页面,如图A所示。注意,Codebehind类(本例中是Form1)继承自Page类。清单A给出了一个用VB写的简单例子,里面有.aspx页和codebehind文件。
图A
Page指示Form1.aspx指向Form1.aspx.vb文件和它的Form1类。在代码中,先说明Form1类继承自Page类,然后申明页面中的控件以及相应的事件处理代码(本例中,事件包括Page类的Load事件和btnHello按钮的Click时间)。
代码清单A中的Page_Load事件处理函数很有趣。你会发现这个方法把Load事件作为MyBase对象来处理。实际上,Load事件只是页面处理时发出的几个事件中的一个。其它的事件(按执行顺序,连同Load事件)包括Init、Load、PreRender和Unload。当这些事件发生后,Codebehind类中的代码就可以处理请求,例如,在Load事件中发出一个数据库调用来让页面显示结果,在Unload事件记录请求到数据库。