Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Web用户控件库_C#_Asp.net_User Controls - Fatal编程技术网

C# ASP.NET Web用户控件库

C# ASP.NET Web用户控件库,c#,asp.net,user-controls,C#,Asp.net,User Controls,我们有一堆用户控件,我们想从web应用程序中提取出来,放入一个单独的程序集/库中,我认为这就像创建一个类库,将ascx和ascx.cs文件放入项目中,并编译一个DLL以便在我们的应用程序中重用一样简单 然而,情况并非如此 我们的最终目标是拥有一个可分发的DLL(类似于Telerik分发控件的方式),我们可以将其放入任何web应用程序中。此处的步骤:非常简单,但是这会产生许多名为controlname.ascx.guid.dll的文件,这不是所需的结果。我甚至无法让它们工作,因为我们有额外的类需要

我们有一堆用户控件,我们想从web应用程序中提取出来,放入一个单独的程序集/库中,我认为这就像创建一个类库,将ascx和ascx.cs文件放入项目中,并编译一个DLL以便在我们的应用程序中重用一样简单

然而,情况并非如此

我们的最终目标是拥有一个可分发的DLL(类似于Telerik分发控件的方式),我们可以将其放入任何web应用程序中。此处的步骤:非常简单,但是这会产生许多名为controlname.ascx.guid.dll的文件,这不是所需的结果。我甚至无法让它们工作,因为我们有额外的类需要编译到程序集中


是否有人在.NET中成功创建了web用户控件库(我们这里使用的是3.5)?我似乎找不到一个好的分步指南。

如果您想在project之间共享控件,我的经验表明,最好的方法是构建自定义asp.net服务器控件,而不是用户控件。用户控件有利于在同一个项目内共享,但不能在多个项目上共享

为此,我建议您在类库中构建一组自定义服务器控件,并将其用于所有项目

在解释创建服务器控件的基础知识方面做得相当好

编辑:

我目前正在开发一个.NETWeb服务器控件库。事实上,我没有遵循任何循序渐进的指导。我主要考虑使用我上面提到的书和MSDN library+Reflector,这是检查现有MS server控件并从中学习的一个很好的工具。

我意识到这是一个老话题,但如果有人正在寻找一个创建可重用用户控件库的解决方案,结果证明它相当简单。以下是两个很好的分步指南以及源代码:

从MSDN:

从代码项目:

第二个链接为第一个链接创建的多个DLL提供了解决方案

编辑-(2)似乎是一个死链接。这是新的链接


我找到了教程,但它似乎有点像黑客,因为它依赖于生成后的命令行事件将用户控件从一个项目复制到另一个项目。

我承认有点晚

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

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

现在,当您在页面中使用库(例如)时,必须使用在web.config中定义的别名和在Reflector中看到的typename,即

<ucl:usercontrol_ascx ... />

我发现在WDP上增加网站的依赖性是很有用的,这样WDP就在网站之前构建;现在,我可以更改WAP中的用户控件,而无需在构建网站之前记住构建WAP


< P>我希望有人发现这是有用的,因为它花了我一些灰色头发到这个阶段,仍然有VS做它的“自动”的事情。

是的,我们正在考虑。所以你考虑编写自定义服务器控件吗?是的,但是问题在于用户控件目前正在使用ASP.NET控件。例如,我不希望为了模拟用户控件中的ListView而编写HTML。当然,您使用的是asp.net控件。那很好。您可以直接使用ListView或使用Repeater控件在内部模拟ListView。创建服务器控件并不一定意味着自己编写整个Hml渲染。当我将其他asp.ne控件组合在一起时,我自己很少覆盖渲染(…)。我目前只访问了iPhone。今天晚上我将提供一个例子。