您何时可以在Web自定义控件上使用Web用户控件?

时间:2008-09-22 17:00:28

标签: asp.net controls client-side web-user-controls

有人可以解释何时使用这些?在许多情况下,它们几乎可以互换。

自定义控件添加到工具栏,而用户控件(ascx)则不能。用户控件执行时,自定义控件不会在Designer中呈现。除此之外,您如何选择合适的使用方法?

另外,我正在寻找从JavaScript(GetElementById)访问控件的最佳方法。因此,添加客户端支持的正确方向将是很好的。

8 个答案:

答案 0 :(得分:10)

这是来自微软的网站:

网络用户控件

  • 更容易创建
  • 对使用视觉设计工具的消费者的有限支持
  • 每个应用程序都需要单独的控件副本
  • 无法添加到Visual Studio中的工具箱
  • 适合静态布局

网页自定义控件

  • 难以创建
  • 完整的视觉设计工具支持 消费者
  • 只有一个控件副本 在全球集会中需要 高速缓存
  • 可以添加到工具箱中 Visual Studio
  • 适合动态布局

http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx

答案 1 :(得分:2)

UserControl必须由网站托管,并使用代码隐藏模型与ASCX文件相关联。因此,使用用户控件,您可以在ASCX文件中为控件定义基本标记,并将所有代码放入ASCX.CS文件中。

WebControl只是一个类,不允许您定义关联的ASCX文件;您需要覆盖Render函数以打印出控件将要生成的任何标记。但是,因为它不依赖于ASCX,所以可以将其放入共享库中。 (一个DLL)

回答您的问题:Web和UserControl都有相同的好处 - 它们占用了页面的某些部分并将其封装起来。当有问题的代码仅适用于我的一个网站时,我使用UserControls;如果我在多个站点中使用类似的代码,那么我将把代码转换为WebControl并将其移动到共享库中。这样,当我需要更新它时,我在一个地方而不是3或4进行更改。

提示:您可以通过继承标准ASP WebControl之一来解决定义自己的WebControl的一些麻烦。标签或图像等许多标准控件都没有密封 - 您可以从它们继承并覆盖它们的方法来创建您自己的该控件的专用版本。与直接扩展WebControl相比,这更容易,也更不容易出错。

答案 2 :(得分:1)

我认为您所考虑的是自定义控件与用户控件,两者都是Web控件。 usercontrol没有设计器UI,而自定义控件可以。

通常我们使用UserControl将我们的UI分成不同的功能区域。但是,如果我们创建我们想要在多个解决方案中使用的功能,我们通常会将它们创建为自定义控件。

只能将自定义控件添加到工具箱中。

以下摘自Microsoft:

http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx

答案 3 :(得分:1)

用户控件是使用项目编译的,必须使用与项目相同的语言编写。

可以在画布上删除自定义控件,并通过设置属性进行配置,而无需程序员了解所有内部结构(可以是好的也可以是坏的)。此外,由于自定义控件是在dll中预编译的,因此不需要使用与项目相同的语言编写。

如果注意细节,可以编写自定义控件以在设计器中显示(虽然这可能不值得麻烦)。

答案 4 :(得分:0)

要从JavaScript访问它们,您应该使用document.GetElementById('<%=TheControl.ClientID%>') Web控件和用户控件之间的区别在于用户控件具有带有html定义的ascx文件,而Web控件没有;这是其他差异的原因。此外,对于用户控件,您无法使用new Control(),因此需要使用LoadControl,因为它会加载.ascx。
对于从.Net控件继承的简单控件,如带有验证的文本框或类似的东西,我倾向于使用Web控件;对于使用html和内部控件的更复杂控件,我倾向于使用用户控件。但这基本上是你个人的偏好。

答案 5 :(得分:0)

简单:

用户控件:

  • UserControl需要* .ascx文件来完成实例初始化。因此,您无法从另一个派生UserControl。
  • UserControl具有* .ascx文件,因此您可以轻松编写HTML。并且(最大的优点)您可以更改文件的内容* .ascx,并在Web应用程序的运行时更改控件的外观。

的WebControl:

  • WebControl在程序集中是“唯一”类,因此您可以从它们派生另一个控件。
  • WebControl没有* .ascx(或其他)文件,没有人无法更改此控件的外观(例如,不合格的Web管理员)。

答案 6 :(得分:0)

这不是真的。 webcontrol就像一个按钮,您可以为它构建一个设计器,以便它在设计器模式下呈现。

主要区别在于webcontrol是一个原子单位。它应该像Visual Studio中的所有其他默认服务器控件一样工作(包括设计器模式)。此外,它完全由代码构建,并存储在DLL中(即它没有html端,也没有发布到网站上。)

虽然用户控件是ASP Include的.NET版本。有一个带有相应代码隐藏页面的html代码段。有一个ASCX文件在发布期间被推送到网站。另外需要注意的是,这些比服务器控件更容易开发。

一个比另一个好吗?这取决于目标是什么。但总的来说,如果你正在为其他人/项目构建一些东西,那么请使用webcontrol。如果您正在为自己的项目消费构建一些东西,那么请使用用户控件。

现在,就JS而言,这是一个难以描述的事情,并且需要进行相当大的讨论。对于服务器控件,您需要为JS提供钩子以获取每个内部控件的客户端ID。用户控件可以直接在用户控件上编写JS代码,并以与ASPX页面相同的方式访问控件。

答案 7 :(得分:0)

用户控件

  • 易于实施,因为您可以直观地拖动和删除标记部分的其他控件。
  • Visual Studio中的良好设计器支持
  • 只能在同一个项目中重复使用
  • 您还可以创建模板化用户控件(如果不是那么常用)

自定义服务器控件

  • 难以创建,但有各种可能的场景:
    • 继承现有的控件,例如Label,Button,......
    • 创建复合控件
    • 制作模板,+数据包,控件
  • 其他项目的重复使用性
  • 非常适合制作可在公司范围内使用的框架