ASP.NET 控件设计器概述

更新:2007 年 11 月

ASP.NET 增强了对创建 Web 服务器控件的设计器的支持。您可以使用设计器生成控件的设计时用户界面 (UI),从而让开发人员可以在可视化设计工具(如 Visual Studio)中配置控件的属性和内容。有关 .NET Framework 所提供的设计时结构和功能的背景信息,请参见扩展设计时支持

本简介解释了 ASP.NET 控件设计器的功能、基本设计器类及其功能和使用设计器的方案。

设计器功能

ASP.NET 在继续支持早期版本的控件设计器结构的同时,还进行了重大的改进。

  • 基于区域的编辑。区域是控件设计时视图中的可编辑区域。该功能提供了设计时对控件内容的 WYSIWYG 编辑。

  • 操作表。操作表是控件的页面开发人员可以在设计时 UI 中使用的任务菜单。例如,控件的设计时视图可以提供可用任务菜单,包括自动设置控件格式的任务。

  • 数据源和数据绑定设计器。数据源控件设计器使得页面开发人员可以配置数据源控件。数据绑定控件设计器使得页面开发人员可以配置数据绑定控件。提供了一些功能,可用于实现数据源设计器和数据绑定设计器之间的相互通信。有关数据源控件设计器的示例,请参见 DataSourceDesigner。有关数据绑定控件设计器的示例,请参见 HierarchicalDataBoundControlDesigner

  • **简化的模板编辑。**为模板化控件(如 GridView)的设计时编辑创建 UI 的模型,已极大地简化和修改,使得控件开发人员可以选择用区域执行自己的模板编辑。有关示例,请参见 模板化服务器控件示例

  • 简化的对象模型。已简化使用设计时呈现的对象模型,使得开发人员必须关心的唯一重要的问题是生成设计时 HTML。几个新的基类提供对简化的对象模型的访问:ControlDesignerContainerControlDesignerCompositeControlDesigner

  • **订阅主机服务。**控件设计器可以订阅和使用宿主环境所提供的各种服务。例如,控件设计器可以使用 Visual Studio 2005 服务实现以下功能:提供对数据的访问、提供对配置的访问、在设计时以编程方式向页面添加控件、在设计器中处理 Click 事件、在设计图面上进行绘制以及访问其他服务(如设计器状态)。

设计器类

通过充当运行时控件和宿主环境之间的调节器,控件设计器启用 Web 服务器控件的设计时呈现。在宿主环境内部,设计器提供下面的功能帮助您为控件的用户创建设计时 UI:

  • **设计时呈现和内容。**控件设计器启用多种呈现,包括简单呈现和复杂呈现。基于区域的编辑和模板编辑是可以为控件提供的多种设计时 UI 的示例。还可以在控件上提供列编辑或多个运行时视图,因此设计时使用该控件的开发人员可以就如何在运行时呈现控件从一组选项中进行选择。

  • **其他设计时类。**除了设计器类之外,还有与类型或属性关联且执行类型转换(从字符串到值的转换)的类型转换器类。还有为编辑属性提供专用 UI 的 UI 类型编辑器类。例如,属性窗格中的颜色选取器下拉列表使您可以为 Web 控件上的颜色属性选择一种颜色。还可以创建专用的组件编辑器,它是提供对控件的属性进行整体编辑的类。

  • 关联控件的数据的持久性。控件的内部属性和内容可以保持,因此该控件及其子控件在设计时环境中可保持状态。这由标记中配置控件定义的方式控制。

为 Web 服务器控件创建控件设计器时,有几个可能要使用的基类:

使用设计器的方案

有两种可能使用控件设计器的常见方案:开发自定义控件和开发可视设计工具。

如果开发自定义 Web 服务器控件,可以创建关联的设计器来提高页面开发人员在设计时配置控件的能力。如果该控件可能被许多页面开发人员重用,则该方案尤其有用。例如,可能创建自定义图表控件。如果提供关联的控件设计器,则不同的 Intranet 页面开发人员中每个人都可以用不同的样式在页面上配置控件。

如果开发一种与 Visual Studio 2005 或 Microsoft FrontPage 类似的可视化 Web 设计工具,则可以使用控件设计器承载组件。这将使您的工具能够提供服务和与控件设计器交互,从而为自定义控件提供设计时呈现。

有关 .NET Framework 设计器结构的更多信息,请参见 设计时结构。有关为自定义 Web 服务器控件创建自己的设计器的详细信息,请参见 演练:为 Web 服务器控件创建基本控件设计器。有关创建具有服务和操作列表的自定义控件设计器以提供设计时用户界面 (UI) 的详细信息,请参见具有操作表和服务的示例控件设计器

保证自定义控件设计器的安全

当控件位于设计视图中时,设计器组件将会处理属性更改,并在设计宿主(例如 Visual Studio)中呈现标记。设计时,控件的设计器组件与其设计宿主在同一个信任级别上运行。设计器组件可能会执行下列操作:访问数据库,调用远程服务器上的网站,创建文件并将其写入开发人员的计算机,发送电子邮件,以及执行其他程序集中的代码。

本节中的信息介绍了一些最佳做法,可帮助于您提高控件设计器功能的安全性。

除了遵循编码和配置的最佳做法来帮助提高应用程序的安全性之外,请确保利用 Microsoft Windows 和 Internet 信息服务 (IIS) 的最新安全更新,使应用程序服务器始终保持最新。您还应当确保具有已安装在计算机上的任何商用自定义控件包的最新版本。

在 Michael Howard 和 David LeBlanc 编写的 Writing Secure Code(《编写安全代码》)一书中,您可以找到有关编写安全代码和保护应用程序安全的最佳做法的更多详细信息。有关其他指南,请参见 Microsoft Patterns and Practices(Microsoft 模式和实践)网站和指南与最佳做法

自定义控件用户面临的安全问题

您应该清楚,来自未知源的自定义控件可能包含将您计算机中的敏感数据在网上公开或在设计时运行恶意代码的设计器。不能使用代码访问配置来限制控件设计器的访问,因为这些设计器始终必须以完全信任级别在设计宿主中运行。有关信任级别的更多信息,请参见 ASP.NET 信任级别和策略文件。有关代码访问安全性的更多信息,请参见代码访问安全性介绍

自定义控件开发人员面临的安全问题

使用类和成员的配置属性将权限限定为控件功能所需的最低级别的做法,并不能对设计器组件提供足够的安全防范,因为这些组件必须以完全信任级别在设计宿主中运行。

如有可能,在预览数据控件(如 GridView 控件)时,请不要使用数据库中的实时数据来显示示例结构。这会暴露数据库中可能敏感的数据 应改使示例数据结构来构建预览数据。

设计宿主开发人员面临的安全问题

如果您要开发设计宿主(如 Visual Studio),则应检查 HTML 标记、文本以及从设计器返回的其他数据是否存在安全风险,只有在不存在安全风险时,才对其进行显示。此外,将 HTML 标记字符串和设计器区域的大小限定为易于管理的大小。有关 HTML 验证的更多信息,请参见 在 ASP.NET 网页中验证用户输入

支持多种开发工具

Microsoft Visual Web Developer 支持在本主题中讨论的所有功能,但是其他开发工具可能不支持。可能不被支持的功能的一些示例为:

请参见

概念

设计时结构

具有操作表和服务的示例控件设计器

其他资源

ASP.NET 网页的设计时支持

扩展设计时支持