有人可以解释何时使用这些吗?在许多情况下,它们几乎可以互换。
自定义控件被添加到工具栏,而用户控件 (ascx) 不能。自定义控件不会在设计器中呈现,而用户控件会呈现。除此之外,您如何选择哪个是正确的?
此外,我正在寻找从 JavaScript (GetElementById) 访问控件的最佳方法。因此,添加客户端支持的正确方向会很棒。
有人可以解释何时使用这些吗?在许多情况下,它们几乎可以互换。
自定义控件被添加到工具栏,而用户控件 (ascx) 不能。自定义控件不会在设计器中呈现,而用户控件会呈现。除此之外,您如何选择哪个是正确的?
此外,我正在寻找从 JavaScript (GetElementById) 访问控件的最佳方法。因此,添加客户端支持的正确方向会很棒。
这是来自微软的网站:
网络用户控件
网页自定义控件
http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx
UserControl 必须由网站托管,并使用代码隐藏模型与 ASCX 文件相关联。因此,使用用户控件,您可以在 ASCX 文件中定义控件的基本标记,并将所有代码放入 ASCX.CS 文件中。
WebControl 只是一个类,不允许您定义关联的 ASCX 文件;您需要重写 Render 函数以打印出控件将要生成的任何标记。但是,由于它不依赖于 ASCX,因此可以将其放入共享库中。(一个DLL)
回答您的问题:Web 控件和 UserControls 都具有相同的好处 - 它们占用页面的某些部分并将其封装。当相关代码仅适用于我的一个网站时,我使用 UserControls;如果我在多个站点中使用类似的代码,那么我会将代码转换为 WebControl 并将其移动到共享库中。这样,当我需要更新它时,我会在一个地方而不是 3 或 4 处进行更改。
提示:您可以通过从标准 ASP WebControl 之一继承来避免定义自己的 WebControl 的一些麻烦。许多标准控件(如 Label 或 Image)不是密封的 - 您可以从它们继承并覆盖它们的方法以创建您自己的该控件的专用版本。这比直接扩展 WebControl 更容易且不易出错。
用户控件与项目一起编译,并且必须使用与项目相同的语言编写。
自定义控件可以放在画布上并通过设置属性进行配置,而程序员无需了解所有内部结构(可能是好的或坏的)。此外,由于自定义控件是在 dll 中预编译的,因此不需要使用与项目相同的语言编写。
如果注意细节,可以编写自定义控件以在设计器中显示(尽管这可能不值得麻烦)。
我认为您正在考虑的是自定义控件与用户控件,两者都是 Web 控件。用户控件没有设计器 UI,而自定义控件可以。
通常,我们使用 UserControls 将我们的 UI 分成不同的功能区域。但是,如果我们创建想要跨多个解决方案使用的功能,我们通常将它们创建为自定义控件。
只能将自定义控件添加到工具箱中。
以下是微软的摘录:
http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx
要从 JavaScript 访问它们,您应该使用document.GetElementById('<%=TheControl.ClientID%>')
.
Web 控件和用户控件的区别在于,用户控件具有带有 html 定义的 ascx 文件,而 Web 控件没有;这就是其他差异的原因。此外,对于您不能使用的用户控件new Control()
,您需要改为使用,LoadControl
因为它会加载 .ascx。
对于从 .Net 控件继承的简单控件,例如带有验证功能的文本框或类似的东西,我倾向于使用 Web 控件;对于带有 html 和内部控件的更复杂的控件,我倾向于使用用户控件。但这基本上是您的个人喜好。
简单的:
用户控制:
网络控制:
这并不完全正确。Web 控件就像一个按钮,您可以为它构建一个设计器,这样它就可以在设计器模式下呈现。
主要区别在于 webcontrol 是一个原子单元。它应该像 Visual Studio 中的所有其他默认服务器控件一样工作(包括设计器模式)。此外,它完全用代码构建,并存储在 DLL 中(即它没有 html 部分,也没有任何内容发布到网站上)。
而用户控件是 ASP 包含的 .NET 版本。有一个带有相应代码隐藏页面的 html 片段。有一个 ASCX 文件在发布期间被推送到网站。附加说明,这些比服务器控件更容易开发。
这个比那个好吗?这取决于目标是什么。但总的来说,如果您正在构建一些供其他人/项目使用的东西,请使用网络控件。如果您正在为自己的项目消费构建一些东西,那么请使用用户控件。
现在,就 JS 而言,这是一件更难描述的事情,并且值得单独进行相当大的讨论。对于服务器控件,您需要为 JS 提供挂钩以获取每个内部控件的客户端 ID。作为用户控件,您可以直接在用户控件上编写 JS 代码,并以与在 ASPX 页面中相同的方式访问控件。