【问题标题】:Is it possible to add a web user control to a class library?是否可以将 Web 用户控件添加到类库中?
【发布时间】:2008-12-29 20:11:52
【问题描述】:

我正在考虑构建一些 Web 用户控件,着眼于重用,但我似乎无法在 VS2008 的类库中添加 Web 用户控件。有没有办法解决这个问题,或者有没有更好的方法来创建可重用的控件?

【问题讨论】:

    标签: asp.net web-controls


    【解决方案1】:

    您可以创建封装所需功能的 Web 用户控件Web 自定义控件。这两个控件的主要区别在于易于创建与设计时的易用性。

    您或许应该考虑创建一个 Web 自定义控件库。有一个walkthrough for creating a web custom control using the Web Control Library template

    根据 MSDN 文章“Recommendations for Web User Controls vs. Web Custom Controls”,这些是两种控件之间的区别:

    网络用户控件易于制作, 但它们使用起来不太方便 在高级场景中。你开发网络 用户控件几乎完全相同 开发 Web 表单页面的方式。 与 Web 窗体一样,用户控件可以是 在视觉设计师中创建,他们 可以用代码分开编写 从 HTML,他们可以处理 执行事件。

    但是,因为网络 用户控件是动态编译的 在运行时它们不能被添加到 工具箱,它们被表示 通过一个简单的占位符字形当 添加到页面。这使得 Web 用户 控制更难使用,如果你是 习惯了完整的 Visual Studio .NET 设计时支持,包括 属性窗口和设计视图 预览。

    另外,分享的唯一方式 应用程序之间的用户控制 是在每个中放置一个单独的副本 应用程序,这需要更多 如果您对 控制。

    Web 自定义控件是编译后的代码, 这使它们更易于使用,但 更难创造;网页定制 控件必须用代码编写。 创建控件后, 但是,您可以将其添加到工具箱 并在视觉设计器中显示 具有完整的属性窗口支持 以及所有其他设计时功能 ASP.NET 服务器控件。

    另外,您可以安装单个 Web 自定义控件的副本 全局程序集缓存并共享它 应用程序之间,这使得 维护更容易。更多 信息见全局程序集缓存。

    【讨论】:

      【解决方案2】:

      按照以下步骤(来自 Phil Haacked 的 this post):

      1. 关闭 VS.NET 2005。

      2. 打开目录 C**:\Program Files\Microsoft Visual Studio 8\Web\WebNewFileItems\CSharp**(假设默认安装 VS.NET)。

      3. 在记事本中打开 CSharpItems.vsdir 文件。选择文本并将其复制到剪贴板。

      4. 现在打开文件 C:\Program Files\Microsoft Visual Studio 8\VC#\CSharpProjectItems\CSharpItems.vsdir 并将剪贴板的内容粘贴到现有文本下方。

      5. 现在将 C:\Program Files\Microsoft Visual Studio 8\Web\WebNewFileItems\CSharp 的内容(不包括 CSharpItems.vsdir)复制到文件夹 C:\Program Files\Microsoft Visual Studio 8\VC#\CSharpProjectItems

      现在,当您选择添加 | 时,“Web 用户控制”应该是一个选项。新物品。

      参考:http://haacked.com/archive/2006/02/07/addingwebusercontroltoaclasslibraryinvs.net2005.aspx

      【讨论】:

      • 我确实在 VS2010 上尝试过 ..但它部分有效..任何想法如何实现这一点都是 VS2010
      【解决方案3】:

      正如 platte 的链接所提到的,如果您要重复使用,那么 Web 用户控件不是很好。必须手动将 ascx 文件复制到您要在其中使用它们的每个项目中,否则您必须自行破解。

      最好使用 System.Web.UI.WebControls.WebControl,这是您在添加“ASP.NET 服务器控件”时得到的。这些是为重用而设计的。如果现有的框架控件之一在很大程度上符合要求,并且您只需要扩展它的功能,那么添加一个“ASP.NET 服务器控件”并将其更改为从 Panel 或 Menu 或其他继承。

      如果您仍然决心让可重复使用的 Web 用户控件发挥作用,那么 this article by The Gu 应该会让您走上正确的道路。

      【讨论】:

        【解决方案4】:

        我假设您可以使用一个名为“ASP.NET 服务器控件”的项目模板...

        --larsw

        【讨论】:

          【解决方案5】:

          你可以在类库中做任何事情。

          1. 添加对 System.Web 的引用
          2. 创建新的 Control 类,该类继承 从 WebControl 或 HtmlControl 或 随便。

          就是这样。您现在拥有一个可重用的 ASP.NET 控件。

          你可以做一些特殊的事情,比如为你的类和属性添加属性,但它们实际上是不需要的。

          [DefaultProperty("Text")]
          [Category("...")]
          [DefaultValue("")]
          

          【讨论】:

            【解决方案6】:

            您可以使用虚拟路径提供程序,但您应该考虑它是否真的值得您尝试。在这个主题上考虑这个codeproject article

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-09-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-15
              • 1970-01-01
              相关资源
              最近更新 更多