代码改变世界

开发Web控件(转)

2005-09-19 17:18  JohnHoo  阅读(448)  评论(0)    收藏  举报
控件是一个很吸引人的概念。


.NET 对开发 Web 窗体控件的支持

.NET 框架中包含预先创建的软件类,这些类使得编写 Web 窗体控件变得相对简单。您需要理解 HTML 才可以生成控件所要求的输出,就像 Windows 窗体控件的设计者需要理解 Windows GDI 一样。但是,挂钩到 ASP.NET 页生存周期的例程、在多次调用之间维护状态的例程和检测宿主浏览器功能的例程(全部控件都具备的基础结构)已经为您编写好了。

您可以使用自己所选择的与 .NET 兼容的语言来编写控件,通过从自己选择的若干个 .NET 框架类继承来使用预先创建的基础结构。这些基类大致对应于 Windows 窗体中的类。但是,常见的情况是,Microsoft 使用了同一个名称来在看上去类似的环境中指代不同的事物,因此,必须谨慎从事,并阅读附属细则。

下面介绍开发 Web 窗体控件的五种方法:

第一种选择:是从 System.Web.UI.Control 派生,该类是所有 Web 窗体控件的基类。它参与 ASP.NET 页呈现过程的所有生存周期事件。文档中指出该类没有任何特定于用户界面的功能,虽然它存在于 System.Web.UI 命名空间中。我有不同意见。它包含一个 Render 方法(将在下一节对其进行介绍),控件使用该方法来发出要在浏览器中显示的 HTML。它比我要介绍的下一个类具有更少的内置 UI 属性;例如,它没有 Width、Height、ForeColor、BackColor 和 Font,但如果您一定要使用它来生成 UI,实现起来仍是非常容易的。由于省略了以上元素,它更为轻型化,但由此所造成的差异微乎其微。如果您不关注它所省略的任何功能,使用它作为基类完全没有问题。

您的下一个选项:是从 System.Web.UI.WebControls.WebControl 派生,该类派生自 System.Web.UI.Control。这是一个添加了基本用户界面属性的控件。当您生成新的 Web 控件库项目时,Visual Studio 会自动使用它作为基类。如果您想要得到像大多数控件一样提供用户界面的控件,您可能应当从这里开始。

您还可以从现有的 Web 窗体控件入手,可以是 Visual Studio 附带的控件,或者从第三方购买的控件。此时,您需要使用 .NET 继承机制从现有控件派生自己的控件。您需要重用现有功能中自己需要的部分,重写要更改的部分,并添加要使控件具备的任何附加功能。在我以前的文章中,曾经介绍了如何使用 Windows 窗体文本框控件来完成以上任务。针对 Web 窗体控件完成该任务与此完全相同,这里不再重复介绍。

另一个选项:是设计一个包含其他控件的控件。在 Windows 窗体中,它称为用户控件,但是在 Web 窗体中,它称为复合控件。您可以为自己的基类选择以上所介绍的三种继承方案中的任一种。不幸的是,Web 窗体不像 Windows 窗体一样支持添加子控件。因此,必须在代码中手动创建和定位子控件。这并不困难,因此这里不作讨论。但是,我发现这一省略颇为令人吃惊。

最后,您可以选择创建用户控件。以上所讨论的每个控件都是完全编译的 .NET 程序集。它们可用于 Visual Studio 工具箱和设计器,并可以保存在全局程序集缓存 (GAC) 中,因此无需为每个要使用它们的客户端使用一个单独的副本。Web 窗体提供了另外一种生成可重用控件包的方法(用户控件)。像您在 Windows 窗体中看到的用户控件一样,Web 窗体用户控件是通过在 Visual Studio 设计器中将其他控件放置到设计图面上来生成的。但是,与 Windows 窗体用户控件不同,这种用户控件是一个 HTML 页,而不是已编译的程序集,因此不能保存到 GAC 或 Visual Studio 工具箱中,而且,也不能在 Visual Studio 设计器中显示其外观。因此,我认为它的有用性远不如我所介绍的其他类型的 Web 窗体控件。我怀疑它之所以存在,是因为复合 Web 窗体控件中缺少设计器支持。


未完.....

原文地址:http://www.microsoft.com/china/msdn/library/webservices/asp.net/VCS0206webctoc.mspx