能否将Web用户控件添加到类库中?

9

我正在考虑构建一些具有重复使用性的Web用户控件,但是在VS2008中我的类库中似乎无法添加Web用户控件。是否有解决此问题的方法,或者创建可重用控件的更好方法?

6个回答

5
你可以创建包装所需功能的Web用户控件Web自定义控件。两种控件之间的主要区别在于创建的容易程度与设计时使用的容易程度。
你可能应该考虑创建一个Web自定义控件库,这里有一个使用Web控件库模板创建Web自定义控件的演练
根据MSDN文章“Web用户控件与Web自定义控件的建议”,这是两种类型控件之间的区别:
Web用户控件易于制作,但在高级场景下使用可能不太方便。您几乎可以像开发Web表单页面一样开发Web用户控件。像Web表单一样,用户控件可以在可视化设计器中创建,可以用代码与HTML分离编写,并且可以处理执行事件。
但是,由于Web用户控件在运行时动态编译,因此无法添加到工具箱中,并且添加到页面时表示为简单的占位符图标。如果您习惯于完整的Visual Studio .NET设计时支持,包括属性窗口和设计视图预览,则这使得Web用户控件更难使用。
此外,共享用户控件的唯一方法是在每个应用程序中放置单独的副本,如果您对控件进行更改,则需要进行更多维护。
Web自定义控件是编译代码,这使它们更容易使用但更难创建;必须通过代码编写Web自定义控件。但是,一旦创建了控件,您就可以将其添加到工具箱中,并在可视化设计器中显示它,支持完整的属性窗口和所有其他ASP.NET服务器控件的设计时特性。
此外,您可以将Web自定义控件的单个副本安装到全局程序集缓存中,并在应用程序之间共享它,这使得维护更加容易。有关详细信息,请参阅全局程序集缓存。

2
请按照以下步骤操作(参考自Phil Haacked的博客文章):
  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 User Control”应该是“添加|新建项”菜单中的一个选项了。 参考:http://haacked.com/archive/2006/02/07/addingwebusercontroltoaclasslibraryinvs.net2005.aspx

2
我曾尝试在VS2010中实现这个功能,但只有部分成功了。你有什么想法如何在VS2010中实现它吗? - Posto

1

正如platte的链接所提到的,如果你想要重复使用,那么Web用户控件并不是很好。ascx文件必须手动复制到您想要在其中使用它们的每个项目中,或者您必须绕过这个问题。

最好使用System.Web.UI.WebControls.WebControl,这是添加“ASP.NET服务器控件”时得到的内容。这些控件是为了重用而设计的。如果现有框架控件在大部分方面都符合要求,而您只需要扩展其功能,则添加“ASP.NET服务器控件”,并将其更改为从Panel或Menu等继承。

如果您仍然决心使可重用的Web用户控件起作用,那么The Gu的本文应该会为您指明正确的方向。


0

有一个名为“ASP.NET服务器控件”的项目模板,我认为你可以使用它...

--larsw


0
你可以使用虚拟路径提供程序,但你应该考虑它是否真的值得。请参考这篇codeproject文章来了解更多相关内容。

0

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

  1. 添加对 System.Web 的引用
  2. 创建一个新的控件类,该类继承自 WebControl 或 HtmlControl 等。

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

您可以执行一些特殊操作,例如为类和属性添加属性,但实际上并不需要这么做。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接