日期:2014-03-23  浏览次数:20561 次

简介

  Microsoft ASP.NET 为开发人员提供了一种适用于 Web 开发的、功能最为强大的新工具:服务器控件。服务器控件使开发人员能够在短时间内开发出响应速度快而且功能强大的 Web 应用程序,所需的时间与在典型的 ASP 中创建类似应用程序的时间差不多。
  ASP.NET 服务器控件之所以能够提供生产效率,关键原因之一在于它为 Microsoft Visual Studio .NET 开发环境中的服务器控件提供了丰富的设计时支持。开发人员可以将服务器控件从 Visual Studio .NET 工具箱拖放到页面上,通过 Properties(属性)窗口访问它们的属性,然后在 Visual Studio HTML 编辑器以及 ASP.NET 页面的内含代码的类中利用 Microsoft IntelliSense? 语句完成功能。这些设计时功能为 Web 开发带来了快速应用程序开发 (RAD) 工具,而这些工具已被 Microsoft Visual Basic? 开发人员使用了多年。

  ASP.NET 还使开发人员能够通过创建自定义服务器控件以封装大量可重复使用的用户界面特定的代码(例如登录或注册表单),来进一步提高生产效率。尽管开发人员已经开始意识到开发自定义控件的重要性,但许多人可能还没有意识到还能在控件中利用 Visual Studio 设计时支持的强大功能,使这些控件能够像 ASP.NET 中的内置控件那样易于使用。本文将介绍 Microsoft .NET Framework 和 Visual Studio .NET 提供的设计时支持的类型,并向开发人员介绍如何构建利用这种支持的控件。

  阅读目录:

  设计时支持的类型

  Blog 控件示例

  添加设计时支持

  设计视图和元数据特性

  添加工具箱支持

  添加设计器

  HTML视图支持:自定义架构和 Visual Studio 注释

  小结

  附录:

   列表1:Blog.vb代码

   列表 2:BlogClient.aspx代码

   列表 3:BlogClient.aspx.vb代码

   列表 4:Blog_DT.vb

   列表 5:Blog.xsd





  设计时支持的类型

  针对 Visual Studio .NET 中的服务器控件,有五种不同的设计时支持。它们是:

   1、内含代码的类中的 IntelliSense

   2、设计视图中的属性浏览器支持

   3、工具箱支持

   4、HTML 视图中的属性浏览器支持

   5、HTML 编辑器中的 IntelliSense

  这些设计时支持类型是由几个不同的机制提供的。内含代码的类中的 IntelliSense 由 IDE 启用,IDE 为您的控件读取元数据以确定控件所提供的属性和方法及其类型和参数。要启用内含代码的类中的 IntelliSense,只需对您的控件进行编写和编译,然后将其程序集放到使用该控件的应用程序的 bin 子目录中。

  Visual Studio .NET 编辑器设计视图中的属性浏览器支持通过以下两个途径提供:将该类型与某个属性相关联和/或将元数据特性与该属性相关联。将元数据特性(下文简称为特性)添加到您的代码中,用于标识属性的类别、提供属性说明以及在需要时指定首选编辑器。有些类型的属性(如 System.Drawing.Color)会自动映射到 Visual Studio .NET 中的相应编辑器中。

  Visual Studio .NET 的 HTML 视图中的 IntelliSense 和属性浏览器支持通过使用一种 XSD 架构进行提供,该架构用于描述与控件相关联的类型,它使用称为 Visual Studio 注释的文本修饰指定控件的首选编辑器和其他首选项。

  最后,您可以通过结合特性和带有特定属性的自定义位图来支持从 Visual Studio .NET 工具箱拖放控件。


  Blog 控件示例

  用于说明 Visual Studio .NET 中的设计时功能的控件称作“Blog 控件”,如本文末尾的列表 1 所示。该控件提供利用 XML 作为存储介质的简单 Web 日志功能。Web 日志通常称为 Blog,它实际上是一个 Web 页面,供人们在上面张贴有关日常生活、世态百象、时事政治或人们所关心的其他问题的定期观察报告或评论。Blog 条目是通过 Web 浏览器添加的。

  Blog 控件非常简单明了,它利用控件组合向浏览器提供输出。在组合控件中,CreateChildControls 方法(由 ASP.NET 运行时自动调用)会被重写,利用此方法,我们可以创建构成自定义控件 UI 的控件,并将它们添加到控件的“控件”集合中。此外,该控件还包含用于显示和添加 Blog 以及当 XML Blog 存储文件不存在时创建一个这样的文件的逻辑。该控件的几个公共属性需要开发人员在设计时进行设置,其中包括在添加新 Blog 时该控件将重定向到的页面的 URL、与新 Blog 关联的电子邮件地址、控件模式(显示或添加)以及各 Blog 条目之间的分隔线的颜色。图 1 所示为正在运行的 Blog 控件。Add Blog(添加 Blog)超链接由 ASP.NET 超链接控件提供,独立于 Blog 控件。BlogClient.aspx 的代码如列表 2 所示。BlogClient.aspx 的 codebehind 类如列表 3 所示,它提供单击 Add Blog(添加 Blog)链接时更改 Blog 模式的逻辑。




  添加设计时支持

  虽然在 Web 窗体页上使用 Blog 控件非常简单,但并不是很直观。例如,如果没有相关文档,使用 Blog 控件的人就无法知道 Mode 属性的有效值只能是 Display 或 Add。如果未将 Add 模式的相关信息明确地告诉使用该控件的开发人员,他们就很难自己发现并使用这种模式。

  对于使用 Visual Studio .NET(或支持 IntelliSense 的其他 IDE)的开发人员而言,可以通过为控件添加设计时支持来解决这一问题。这可以通过综合利用本文前面所介绍的方法来实现。在为自定义服务器控件提供设计时支持所面临的挑战中,部分原因来自于在自定义控件中全面支持设计时功能所需的方法的多样性。最简单的、不需要任何附加编码的是内含代码的类中的 IntelliSense 语句完成方法,如图 3 所示,此方法适用于 BlogClient.aspx.vb。




  遗憾的是,语句完成功能的自动支持并没有扩展到编辑 Web 窗体页时的设计视图或 HTML 视图,而且 Visual Studio 也没有提供不需要额外的控件工作就能在属性浏览器中查看和编辑属性的内置支持。更复杂的是,要在 Web 窗体编辑器的属性浏览器和设计视图中支持 IntelliSense,需要采用一种方法,要在该编辑器的 HTML 视图中支持 IntelliSense,则需要采用另一种方法。

  要在设计视图中支持属性浏览,所需的方法是通过特性告诉 Visual Studio .NET 如何处理属性。要在 HTML 视图中支持语句完成和属性浏览,需要生成一个自定义 XSD 架构以描述控件中的类型。我们将在下文讨论这两种方法。


  设计视图和元数据特性

  Visual Studio .NET 为使用拖放技术的动态控件设计和修改提供了丰富的支持,同时还提供了属性浏览器之类的工具以及相关的设计器(例如颜色选择器)。对这些工具的支持是通过一系列特性提供的,您可以将这些特性添加到您的控件中。这些特性用于告诉 Visual Studio IDE 是否在属性浏览器中显示控件的属性、属性所属的类型以及应使用哪个设计器设置属性的值。

  对于将要提供设计时支持的控件版本,我们将制作一份控件文件 Blog.vb 的副本,并将其命名为 Blog_DT.vb,然后在副本文件上进行修改。这样可以生成该控件的设计时版本,并保留原始控件以便进行比较。

  要支持在属性浏览器中编辑 AddRedirect 属性,应在属性进程之前添加以下特性,如以下代码片段所示:

<Browsable(True), _
Category("行为"), _
Description("成功提交新的 Blog 条目后, " & _
"应重定向到的 " & _
"页面的 URL。"), _