首页 / 知识

在不同网站应用程序之间共享ASP.NET .ascx控件的最佳方法?

2023-04-13 05:42:00

在不同网站应用程序之间共享ASP.NET .ascx控件的最佳方法?

Best way to share ASP.NET .ascx controls across different website applications?

假设您在IIS中有2个不同的ASP.NET应用程序。 另外,您还有一些ASCX控件要在这两个应用程序之间共享。

创建"用户控件库"的最佳方法是什么,以便无需重复代码即可在2个应用程序中使用相同的控件实现?

控件的ASCX后面带有HTML +代码。

复合控件将很困难,因为我们与使用ASCX文件中的HTML语法来设计控件样式的设计人员一起工作。

Tundey,我们在这里使用SVN。 您是否有实施建议的示例? SVN如何共享ASP.NET控件?

谢谢!


关于如何设置用户控件库项目,然后使用预生成事件将用户控件复制到多个项目中,Scott Guthrie提出了一些很好的建议。它真的很好。

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx


如果您希望能够在单独的项目中使用它们,则需要创建复合控件而不是.ASCX控件。


看看这个:http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx?msg=1782921


除了Tundey所说的以外,NTFS Link Shell扩展对于在其他独立项目之间共享大量内容(例如,带有.ascx / .aspx的文件夹)时也很有帮助。对于代码,我认为最好从VCS制作另一个工作副本。


为此,我首先牺牲了一些易于构建控件的便利性。

您可以创建一个控制库项目,该项目将为您生成一个控制库DLL。缺点是您只能使用代码创建控件。在我的上一个项目中,这很好。在更复杂的控件中,这可能是一个问题。

这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _
Public Class BreadCrumb
    WebControl

    <Bindable(True)> _
    Property Text() As String
        '...'
    End Property

    Protected Overrides Sub RenderContents(output as HtmlTextWriter)
        output.write(Text)
    End Sub

    Private Sub Page_Load(...) Handles MyBase.Load
        ' Setup your breadcrumb and store the HTML output '
        ' in the Text property '
    End Sub
End Class

您在该Text属性中放置的所有内容都将被呈现。

然后,您在此处放置的任何控件都可以像您使用的任何其他控件一样起作用。只需将其导入到"工具箱"中,进行注册参考,然后将其放入ASP页面即可。


一种替代方法是使用源代码控制工具在Web应用程序之间"共享" ASCX控件。这样,您就可以在两个应用程序中的控件上进行更改,并让源代码控件确保这些更改反映在我们的Web应用程序中。


我有一个建议.WE可以像往常一样通过在网站项目内部创建用户控件来跨多个应用程序使用用户控件。然后更改网站属性使用固定命名和单页程序集。然后我们可以将用户控件dll用于多个应用程序。


我最近做了一个Web应用程序,该应用程序仅引用了一个Web应用程序(aspx,master和ascx)中的文件(总共约90个),没有太大的问题。也就是说,我使用的是MVP模式的重大修改版本,许多接口和约定来降低复杂性,同一中间层和一个站点是另一个站点的子集。

大问题:

  • 母版页(进而是设计器和html视图格式)在引用的文件上不起作用,因此您失去了很多功能。我对此进行了修改,这是一个预构建步骤和许多svn:ignore条目。让CruiseControl.NET在正确的文件夹中执行预构建任务也很痛苦。
  • 共享的页面/控件需要非常了解它们触摸和引用的内容,以避免引入额外的依赖关系。
  • 两个站点都锁定在一起以进行部署。
  • 现在,我必须祈祷维护者阅读我关于我制造的烂摊子的小文件。到目前为止,它已经超出了我在ASP.NET项目中看到的范围。
  • 要使其正常工作,我承受着巨大的时间压力,现在两个应用程序都已投入生产。我不推荐使用,但如果您有兴趣,请从以下位置开始:

    Add Existing Item, select some files, click on the Add button’s arrow and say Add as a Link.


    我注意到ASP.Net中控件的最大问题是,一旦构建控件,就无法轻松获得设计人员对构建控件以及在站点中使用控件的支持。我能够做到的唯一方法是创建一个没有代码隐藏的.ascx控件(即:所有服务器端代码都位于.ascx文件中的脚本标签中,具有runat =" server"属性) 。

    但是即使那样,您仍然仍然必须复制.ascx文件,因此,如果需要进行更改,则意味着在使用该文件的每个位置都进行了更新。是的,请确保它在源代码控制中。


    我在这里使用StarTeam,它允许您跨多个文件夹"共享"对象(文件,更改请求,需求等)。不确定Subversion(SVN)是否具有该功能。如果没有,则可以使用另一个技巧:创建从控件的主要位置到其他项目中某个位置的连接。联结就像Unix符号链接一样。您可以从此处下载用于在Windows中创建联结的工具


    应用程序控件网站方法

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢