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

时间:2008-09-16 10:38:45

标签: asp.net

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

5 个答案:

答案 0 :(得分:47)

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

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

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

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

答案 1 :(得分:8)

您忘记了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服务器控制。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:2)

与Will的回复相反,可以通过referencing a web deployment project在其他项目中重复使用UserControl。

答案 4 :(得分:0)

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

来自你所包含的link

  

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

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