[转载]用户控件与自定义控件的异同

作者:不详 来源:不详 日期:2007-8-28

如果现有的 ASP.NET 服务器控件都不符合应用程序的特定要求,则可以创建封装所需功能的 Web 用户控件或 Web 自定义控件。这两种控件之间的主要区别在于设计时的易创建性与易用性。

Web 用户控件易于创建,但它们在高级方案中使用起来可能不太方便。开发 Web 用户控件的方式与开发 Web 窗体页的方式几乎完全相同。与 Web 窗体相似,用户控件可以在可视化设计器中创建,可以使用与 HTML 隔离的代码来编写,并且可以处理执行事件。但是,由于 Web 用户控件在运行时动态地进行编译,所以不能将它们添加到工具箱中,而且它们在添加到页面上时由简单的占位符标志符号来表示。如果您习惯于完全的 Visual Studio .NET 设计时支持(包括“属性”窗口和“设计”视图预览),这将会使 Web 用户控件使用起来更不方便。此外,在应用程序之间共享用户控件的唯一方式是将一个单独的副本放入每个应用程序,因此如果对该控件作出了更改,将需要进行比较多的维护。

Web 自定义控件是编译的代码,这使得 Web 自定义控件更易于使用但更难于创建;Web 自定义控件必须使用代码来创建。一旦创建该控件,那么,您就可以将其添加到工具箱中,并在具有完全“属性”窗口支持和 ASP.NET 服务器控件的其他所有设计时功能的可视化设计器中显示该控件。此外,还可以在全局程序集缓存中安装 Web 自定义控件的单个副本,并在应用程序之间共享该副本,这将使维护变得更容易。有关更多信息,请参见全局程序集缓存。

如果您的控件包含大量静态布局,用户控件则可能是较佳的选择。如果您的控件主要是动态生成的(例如数据绑定表的行、树视图的节点或选项卡控件的选项卡),自定义控件则可能是较佳的选择。

下表概述了这两种类型之间的主要区别:

Web 用户控件 Web 自定义控件
易于创建 难于创建
为使用可视化设计工具的使用者提供有限的支持 为使用者提供完全的可视化设计工具支持
每个应用程序中需要控件的一个单独副本 仅在全局程序集缓存中需要控件的单个副本
不能添加到 Visual Studio 中的工具箱 可以添加到 Visual Studio 中的工具箱
适用于静态布局 适用于动态布局

对于“用户控件”,我更愿意称其为“组合控件”。意思是说,该控件可由一个或以上的控件组成,他是个容器。至于包含什么控件,我们可以象编写.net的web form一样去编写我们的“组合控件”。

“自定义控件”我理解为一个真正的控件,就象各个.net服务器控件(工具箱中一大堆的“web窗体”)。

相关阅读

相关文章