我正在考虑构建一些 Web 用户控件,着眼于重用,但我似乎无法在 VS2008 的类库中添加 Web 用户控件。有没有办法解决这个问题,或者有没有更好的方法来创建可重用的控件?
6 回答
您可以创建封装所需功能的Web 用户控件或Web 自定义控件。这两个控件之间的主要区别在于易于创建与设计时的易用性。
您或许应该考虑创建一个 Web 自定义控件库。有一个使用 Web 控件库模板创建 Web 自定义控件的演练。
根据 MSDN 文章“ Web 用户控件与 Web 自定义控件的建议”,这些是这两种控件之间的区别:
Web 用户控件很容易制作,但在高级场景中使用起来不太方便。您开发 Web 用户控件的方式几乎与开发 Web 窗体页面的方式完全相同。与 Web 窗体一样,用户控件可以在可视化设计器中创建,可以使用与 HTML 分离的代码编写,并且可以处理执行事件。
但是,由于 Web 用户控件是在运行时动态编译的,因此它们无法添加到工具箱中,并且在添加到页面时由简单的占位符字形表示。如果您习惯于完整的 Visual Studio .NET 设计时支持,包括属性窗口和设计视图预览,这会使 Web 用户控件更难使用。
此外,在应用程序之间共享用户控件的唯一方法是在每个应用程序中放置一个单独的副本,如果您对控件进行更改,这需要更多的维护。
Web 自定义控件是编译后的代码,这使得它们更易于使用但更难以创建;Web 自定义控件必须用代码编写。但是,一旦创建了控件,就可以将其添加到工具箱中,并在具有完整属性窗口支持和 ASP.NET 服务器控件的所有其他设计时功能的可视化设计器中显示它。
此外,您可以在全局程序集缓存中安装 Web 自定义控件的单个副本,并在应用程序之间共享它,这使得维护更加容易。有关详细信息,请参阅全局程序集缓存。
请按照以下步骤操作(来自Phil Haacked的这篇文章):
关闭 VS.NET 2005。
打开目录 C**:\Program Files\Microsoft Visual Studio 8\Web\WebNewFileItems\CSharp**(假设默认安装 VS.NET)。
在记事本中打开CSharpItems.vsdir文件。选择文本并将其复制到剪贴板。
现在打开文件C:\Program Files\Microsoft Visual Studio 8\VC#\CSharpProjectItems\CSharpItems.vsdir并将剪贴板的内容粘贴到现有文本的下方。
- 现在将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
正如 platte 的链接所提到的,如果您要重用,那么 Web 用户控件不是很好。必须手动将 ascx 文件复制到您要在其中使用它们的每个项目中,否则您必须自行破解。
最好使用 System.Web.UI.WebControls.WebControl,这是您在添加“ASP.NET 服务器控件”时得到的。这些是为重用而设计的。如果现有的框架控件之一在很大程度上符合要求,并且您只需要扩展它的功能,那么添加一个“ASP.NET 服务器控件”并将其更改为从 Panel 或 Menu 或其他继承。
如果您仍然决心让可重用的 Web 用户控件发挥作用,那么The Gu 的这篇文章应该会让您走上正确的道路。
有一个名为“ASP.NET 服务器控件”的项目模板,我假设您可以使用它...
--larsw
你可以在类库中做任何事情。
- 添加对 System.Web 的引用
- 创建从 WebControl 或 HtmlControl 或其他继承的新 Control 类。
就是这样。您现在拥有一个可重用的 ASP.NET 控件。
你可以做一些特殊的事情,比如为你的类和属性添加属性,但它们实际上是不需要的。
[DefaultProperty("Text")]
[Category("...")]
[DefaultValue("")]
您可以使用虚拟路径提供程序,但您应该考虑它是否真的值得您尝试。考虑一下这个关于这个主题的codeproject 文章。