提问人:Mike 提问时间:9/23/2008 最后编辑:RayMike 更新时间:7/2/2010 访问量:6947
何时将 Web 用户控件用于 Web 自定义控件?
When would you use a Web User Control over a Web Custom Control?
问:
有人可以解释何时使用其中的每一个吗?在许多情况下,它们似乎几乎可以互换。
自定义控件将添加到工具栏,而用户控件 (ascx) 则不能。自定义控件不会在设计器中呈现,而用户控件会呈现。除此之外,您如何选择使用哪个是正确的?
此外,我正在寻找从 JavaScript (GetElementById) 访问控件的最佳方法。因此,在正确方向上添加客户端支持会很棒。
答:
这是来自Microsoft的网站:
Web 用户控件
- 更易于创建
- 对使用视觉设计工具的消费者的支持有限
- 每个应用程序都需要单独的控件副本
- 无法添加到 Visual Studio 中的“工具箱”中
- 适用于静态布局
Web 自定义控件
- 更难创造
- 完整的视觉设计工具支持 消费者
- 只有控件的单个副本是 必需,在全局程序集中 缓存
- 可以添加到工具箱中 Visual Studio的
- 适合动态布局
http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx
要从 JavaScript 访问它们,您应该使用 .
Web 控件和用户控件之间的区别在于,用户控件具有具有 html 定义的 ascx 文件,而 Web 控件则没有;这就是造成其他分歧的原因。此外,对于不能使用的用户控件,需要改用,因为这会加载 .ascx。
对于继承自 .Net 控件的简单控件,例如带有验证的文本框或类似的东西,我倾向于使用 Web 控件;对于带有 html 和内部控件的更复杂的控件,我倾向于使用用户控件。但这基本上是你的个人喜好。document.GetElementById('<%=TheControl.ClientID%>')
new Control()
LoadControl
评论
我认为您想到的是自定义控件与用户控件,两者都是 Web 控件。用户控件没有设计器 UI,而自定义控件可以。
通常,我们使用 UserControls 将 UI 分成不同的功能区域。但是,如果我们创建要跨多个解决方案使用的功能,我们通常会将它们创建为自定义控件。
只能将自定义控件添加到工具箱中。
以下是Microsoft的摘录:
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 要容易得多,也不容易出错。
简单:
用户控制:
- UserControl 需要 *.ascx 文件才能完成实例初始化。因此,您不能从一个 UserControl 派生另一个 UserControl。
- UserControl 具有 *.ascx 文件,因此您可以轻松编写 HTML。并且(最大的优点)您可以更改文件的内容 *.ascx,并在 Web 应用程序的运行时更改控件的外观。
网络控制:
- WebControl 是程序集中的“唯一”类,因此可以从中派生另一个控件。
- WebControl 没有 *.ascx(或其他)文件,没有人可以更改此控件的外观(例如,不合格的 Web 管理员)。
这并不完全正确。Web控件就像一个按钮,你可以为它构建一个设计器,以便它以设计器模式呈现。
主要区别在于 webcontrol 是一个原子单元。它应该像 Visual Studio 中的所有其他默认服务器控件一样工作(包括设计器模式)。此外,它完全内置在代码中,并存储在 DLL 中(即它没有 html 端,也没有发布到网站)。
虽然用户控件是 ASP Include 的 .NET 版本。有一个 html 片段,其中包含相应的代码隐藏页面。有一个 ASCX 文件在发布期间被推送到网站。另外需要注意的是,这些控件比服务器控件更容易开发。
一个比另一个好吗?这取决于目标是什么。但一般来说,如果你要为其他人/项目构建一些东西来使用,请使用 webcontrol。如果您要为自己的项目使用而构建某些内容,请使用用户控件。
现在,就 JS 而言,这是一件更难描述的事情,并且需要单独进行相当大的讨论。对于服务器控件,需要为 JS 提供挂钩,以获取每个内部控件的客户端 ID。作为用户控件,您可以直接在用户控件上对 JS 进行编码,并像在 ASPX 页中一样访问控件。
评论
用户控件是随项目一起编译的,并且必须使用与项目相同的语言编写。
自定义控件可以放在画布上,并通过设置属性进行配置,而程序员不知道所有内部结构(可能是好的,也可能是坏的)。此外,由于自定义控件是在 dll 中预编译的,因此不需要使用与项目相同的语言编写它。
如果注意细节,可以编写 Custom 控件以在设计器中显示(尽管这可能不值得麻烦)。
用户控件
- 易于实现,因为您可以直观地将其他控件拖放到标记部分。
- Visual Studio 中良好的设计器支持
- 只能在同一项目中重复使用
- 如果需要,还可以创建模板化用户控件(尽管不是那么常用)
自定义服务器控件
- 更难创建,但有各种可能的场景:
- 继承自现有控件,如 Label、Button、...
- 创建复合控件
- 使控件模板化 + 数据绑定
- 在其他项目中具有出色的可重用性
- 非常适合制作可在公司范围内使用的框架
评论