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

有帮助吗?

解决方案

您可以创建网络用户控件网络自定义控件封装的功能需要。两个对照组之间的主要区别在于在便于创建与易用性的设计时间。

您也许应该考虑创建一个Web自定义控件库。有一个演练使用Web控件在创建一个Web自定义控件库模板

根据MSDN文章“为Web用户控件的建议与Web自定义控件”这些是两种类型的对照之间的差异:

  

网络用户控件是很容易的,   但他们可以使用不太方便   在高级场景。您开发Web   用户控制几乎一模一样   你开发的Web方式窗体页。   像Web窗体,用户控件可   在可视化设计器创建的,他们   可以与代码分离被写入   从HTML,他们可以处理   执行事件。

     

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

     

另外,只有这样才能共享   应用程序之间的用户控制   是把一个单独的副本中的每个   应用程序,这需要更多的   维护,如果你更改了   控制。

     

网络定制控件被编译代码,   这使得它们更容易使用,但   更难以创造;网站自定义   控制必须在代码中编写。   一旦你创建了控制,   但是,您可以将其添加到工具箱   并在可视化设计显示它   全属性窗口支持   和所有其他设计时功能   的ASP.NET服务器控件。

     

此外,可以安装一个单   在网络自定义控件的副本   全局程序集缓存和共享   应用程序之间的,这使得   维护更加方便。欲了解更多   信息,请参阅全局程序集缓存。

其他提示

请按照以下步骤操作(从 这个帖子 作者:菲尔·哈克德):

  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

由于普拉特的链接中提到,如果你打算重用那么Web用户控件不是很好。该ASCX文件必须手动复制到你想在使用它们每一个项目,或者你有破解周围的路。

这是更好地使用System.Web.UI.WebControls.WebControl这是当你添加一个“ASP.NET服务器控件”你会得到什么。这是专为重用。如果现有的框架控件来选择一个适合大部分的账单,你只需要扩展它的功能,然后添加一个“ASP.NET服务器控件”,并改变它从面板或菜单或任何继承。

如果你仍然决心要得到可重用的Web用户控制工作,那么的本文章由谷应该设置你在正确的道路上。

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

- larsw

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

  1. 添加对 System.Web 的引用
  2. 创建您的新控制类,该类从WebControl或HTMLControl或其他任何东西继承。

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

您可以做一些特殊的事情,例如向您的类和属性添加属性,但实际上并不需要它们。

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

您可以使用虚拟路径提供,但你应该考虑是否真的值得你的诡计。考虑此 CodeProject上的文章关于这个问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top