it-swarm.cn

UserControl,WebControl,RenderedControl和CompositeControl有什么区别?

有什么区别,官方术语是什么,ASP.NET 3.5中的任何术语都已过时?

50
Thomas Jespersen

UserControl :以.ascx结尾的自定义控件,由其他Web控件组成。它几乎就像一个aspx网页的小版本。它由UI(ascx)和代码隐藏组成。通过引用DLL无法在其他项目中重用。

WebControl :托管在网页或UserControl中的控件。它由一个或多个类组成,串联工作,并托管在aspx页面或UserControl中。 WebControl没有UI“页面”,必须直接呈现其内容。它们可以通过引用它们的DLL在其他应用程序中重用。

RenderedControl :不存在。可能是WebControl的同义词。可能表示控件直接写入HttpResponse而不是呈现给aspx页面。

CompositeControl:在UserControls和WebControls之间。它们像UserControls一样编码,因为它们由其他控件组成。没有任何用于控件合成的图形UI,并且必须由控件设计者对CompositeControl的UI编辑的支持进行编码。合成是在代码隐藏中完成的。 CompositeControls可以在WebControls等其他项目中重用。

47
Will

你忘记了ServerControl。

根据我的理解,就像这样:

  • 只有两种不同的控件:UserControl和ServerControl
  • CompositeControls是一种“高级”UserControls。在 Scott Guthries Blog 上找到更多信息。
  • 所有这些都是WebControls(因为它们都是从System.Web.UI.Control派生的)
  • 它们都以任何方式呈现,因此我希望将它们全部视为渲染控件。

来自MSDN:

用户控制

在ASP.NET中:使用与ASP.NET页面相同的语法以声明方式创作的服务器控件,并保存为扩展名为.ascx的文本文件。用户控件允许对页面功能进行分区和重用。在第一次请求时,页面框架将用户控件解析为派生自System.Web.UI.UserControl的类,并将该类编译为程序集,并在后续请求中重用该程序集。由于页面样式的创作和部署,用户控件很容易开发,无需事先编译。

服务器控制

封装用户界面和相关功能的服务器端组件。 ASP.NET服务器控件直接或间接地从System.Web.UI.Control类派生。 ASP.NET服务器控件的超集包括Web服务器控件,HTML服务器控件和ASP.NET移动控件。 ASP.NET服务器控件的页面语法在控件的标记上包含runat =“server”属性。另请参阅:HTML服务器控件,验证服务器控件,Web服务器控件。

8
JRoppert

与Web窗体一样,用户控件可以在可视化设计器中创建,也可以使用与HTML分开的代码编写。他们还可以支持执行事件。但是,由于Web用户控件是在运行时动态编译的,因此它们无法添加到工具箱中,并且在添加到页面时由简单的占位符表示。

如果您习惯于完整的Visual Studio .NET设计时支持(包括“属性”窗口和“设计”视图预览),则会使Web用户控件更难使用。在应用程序之间共享用户控件的唯一方法是在每个应用程序中放置一个单独的副本,如果对控件进行更改,则需要更多维护。

Web自定义控件是编译代码,这使得它们更易于使用,但更难以创建。必须在代码中创作Web自定义控件。创建控件后,可以将其添加到工具箱中,并将其显示在具有完整“属性”窗口支持和ASP.NET服务器控件的所有其他设计时功能的可视化设计器中。此外,您可以在全局程序集缓存中安装Web自定义控件的单个副本,并在应用程序之间共享,从而使维护更加容易。

3
Govardhan

与Will的响应相反,可以通过 引用Web部署项目 在其他项目中重用UserControls。

2
Guillaume CR

由于我没有足够的声誉尚未发表评论,我会将其作为答案添加,但它会引用Will的答案。

来自 链接 您包括:

复合控件是构建复杂组件的正确工具,其中多个子控件聚合在一起并在外部和外部世界之间进行交互。渲染控件适用于控件的只读聚合,其中输出不包含下拉或文本框等交互元素。

我相信文档引用的是通过将Render方法重写为Rendered Controls而创建的UserControl。因此,它不是问题所暗示的单独类型,而是实现UserControl的一种方式;一种模式。

0
Don