ASP.NET Web用户控件库

11
我们有一些用户控件想要从Web应用程序中提取出来并放到一个单独的程序集/库中。我以为只需创建一个类库并将ascx和ascx.cs文件导入项目,然后编译DLL即可在我们的应用程序中重复使用。
然而事实并非如此。我们的最终目标是拥有一个可在任何Web应用程序中使用的单一可分发的DLL(类似于Telerik分发其控件的方式)。尽管遵循这里所述的步骤“将.ascx用户控件转换为可再分发的自定义控件”非常简单,但结果会产生许多名为controlname.ascx.guid.dll的文件,这不是期望的结果。无论如何,我甚至不能使它们正常工作,因为我们还需要将其他类编译到程序集中。
有没有人成功地在.NET (我们正在使用3.5)中创建过Web用户控件库?我似乎找不到一个好的逐步指南。
4个回答

9
我意识到这是一个旧话题,但如果有人正在寻找创建可重用用户控件库的解决方案,那么它实际上是相当简单的。以下是两个很好的逐步指南以及源代码:
来自 MSDN:将 .ascx 用户控件转换为可再分发的自定义控件 来自 Code Project:创建 ASP.NET 用户控件库的直接方法 第二个链接提供了第一个链接创建的多个 dll 的解决方案。
编辑-(2)似乎是一个错误的链接。这是新链接。

https://www.codeproject.com/Articles/30247/Straight-way-to-create-ASP-NET-user-controls-libra


7
如果您想在项目之间共享控件,我的经验表明,最好的方法是构建自定义ASP.NET服务器控件,而不是用户控件。用户控件适用于在同一个项目中共享,但不适用于多个项目之间共享。
为此,我建议您在类库中构建一组自定义服务器控件,并在所有项目中使用它们。 这本书很好地解释了创建服务器控件的基础知识。 编辑:
我目前正在开发一个.NET Web服务器控件库。实际上,我没有遵循任何逐步指南。我主要考虑使用上面提到的书籍和MSDN库+ Reflector,后者是检查现有MS服务器控件并从中学习的好工具。

是的,我们正在考虑这个。 - Keith
那么你考虑编写自定义服务器控件吗? - Juri
是的,但问题在于用户控件目前正在使用asp.net控件。例如,我不想编写HTML来模拟我们在用户控件中拥有的ListView。 - Keith
当然,您正在使用asp.net控件。这很好。您可以通过直接使用它或使用Repeater控件来在内部模拟ListView。创建服务器控件并不一定意味着要自己编写整个Hml渲染过程。当我将其他asp.net控件组合在一起时,很少自己覆盖Render(...)方法。 - Juri
我当前只能通过我的iPhone进行访问。今晚我会提供一个例子。 - Juri

2

我承认有些晚了。

要创建一个可重复使用的用户控件库,请创建一个新的Web应用程序项目,删除所有脚手架,添加一个(或多个)用户控件。从Web应用程序项目创建一个Web部署项目,在WDP属性中选择合并所有控件输出选项,并为库分配一个名称,并确保不选中“允许此网站更新”的选项。

构建WDP并使用Reflector检查生成的库;您将看到它包含一个ASP命名空间和您精心制作的类型已被重命名,即usercontrol_ascx。在目标网站中添加对WDP输出dll的两个引用,使用ASP命名空间和您在WDP中定义的程序集名称将system.web/pages/controls节点添加到web.config中。

现在,当您在页面中使用该库时,您必须使用在web.config中定义的别名和在Reflector中看到的类型名称,例如:

<ucl:usercontrol_ascx ... />

我发现在网站的依赖项上添加WDP很有用,这样WDP在网站之前构建;现在我可以在不必记住先构建WAP再构建网站的情况下更改WAP中的用户控件。

我希望有人会觉得这个信息有用,因为我花了一些时间才解决了这个问题,并且VS仍然能自动完成它的任务。


2
我发现了这个教程Creating and Using User Control Libraries,但它似乎有些欺骗性,因为它依赖于一个后期构建命令行事件来将用户控件从一个项目复制到另一个项目。

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