8

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

自定义控件被添加到工具栏,而用户控件 (ascx) 不能。自定义控件不会在设计器中呈现,而用户控件会呈现。除此之外,您如何选择哪个是正确的?

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

4

8 回答 8

10

这是来自微软的网站:

网络用户控件

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

网页自定义控件

  • 更难创造
  • 为消费者提供完整的视觉设计工具支持
  • 在全局程序集缓存中只需要一个控件副本
  • 可以添加到 Visual Studio 的工具箱中
  • 适合动态布局

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

于 2008-09-22T17:06:29.713 回答
2

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

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

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

提示:您可以通过从标准 ASP WebControl 之一继承来避免定义自己的 WebControl 的一些麻烦。许多标准控件(如 Label 或 Image)不是密封的 - 您可以从它们继承并覆盖它们的方法以创建您自己的该控件的专用版本。这比直接扩展 WebControl 更容易且不易出错。

于 2008-09-22T17:09:14.230 回答
1

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

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

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

于 2008-09-22T20:02:50.693 回答
1

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

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

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

以下是微软的摘录:

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

于 2008-09-22T17:08:53.047 回答
0

用户控制

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

自定义服务器控件

  • 更难创建,但有多种可能的场景:
    • 继承现有的控件,如标签、按钮、...
    • 创建复合控件
    • 制作模板化+数据绑定控件
  • 在其他项目中具有很好的可重用性
  • 非常适合制作可在公司范围内使用的框架
于 2010-07-02T12:56:01.193 回答
0

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

于 2008-09-22T17:07:29.960 回答
0

简单的:

用户控制:

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

网络控制:

  • WebControl 是程序集中的“唯一”类,因此您可以从它们派生另一个控件。
  • WebControl 没有 *.ascx(或其他)文件,没有人可以更改此控件的外观(例如不合格的网络管理员)。
于 2008-09-22T17:09:19.097 回答
0

这并不完全正确。Web 控件就像一个按钮,您可以为它构建一个设计器,这样它就可以在设计器模式下呈现。

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

而用户控件是 ASP 包含的 .NET 版本。有一个带有相应代码隐藏页面的 html 片段。有一个 ASCX 文件在发布期间被推送到网站。附加说明,这些比服务器控件更容易开发。

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

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

于 2008-09-22T17:13:24.610 回答