在不同的Web应用程序之间共享ASCX控件

时间:2011-04-15 15:21:16

标签: .net asp.net web-controls ascx

是否可以在不同的Web应用程序之间共享Web控件(.ASCX文件)?

有问题的文件是另一个网络项目的一部分。我尝试编辑web.config来引用ascx文件,但是我遇到了语法错误,它告诉我Iam不允许在这条路径中使用“..”。

<pages>
   <controls>
      <add tagPrefix="my" tagName="IntegerInput" src="~/../MyCommonProject/controls/basic/IntegerInput.ascx" />

我想要解决的基本问题是我们有两个具有许多共同功能的应用程序,特别是Web控件。

简而言之,我们希望在一个单独的项目中提取这两个项目的所有常用功能,因此我们在开发中没有重复的代码,但是这两个项目应该能够作为完全不同的应用程序单独部署,每个项目都得到他们自己的这些控件的副本。

我们如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您必须将用户控件转换为自定义服务器控件。

MSDN有一篇文章here

答案 1 :(得分:2)

我找到了两个解决此问题的方法:

  • 创建一个包含ascx'es和代码的项目。该项目的源文件与使用ascx'es的其他项目共享(即xcopies)。 (blog

  • 为您的用户控件创建一个库,添加现有的ascx和代码隐藏。在Web项目中引用此库。缺点:您使用设计时功能,这意味着:您在设计模式下看不到ascx。 (blog

@Forgotten Semicolon建议的第三种解决方案是转换为服务器控件。此方法还可以提高设计人员的性能。

答案 2 :(得分:2)

还有另一个潜在的解决方案:

将控件放在一个网站中的单个目录中,您认为该网站是“主要”网站;然后在另一个站点中创建一个指向同一物理目录的虚拟目录。

这实际上只适用于ascx文件,而不适用于代码隐藏文件。