2008-08-26 78 views
14

假设您在IIS中有2个不同的ASP.NET应用程序。此外,您还有一些ASCX控件需要在这两个应用程序中共享。跨不同网站应用程序共享ASP.NET .ascx控件的最佳方法?

什么是创建“用户控件库”的最佳方式,以便您可以在2个应用程序中使用相同的控件实现,而不必重复代码?

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


复合控制将很困难,因为我们与使用ASCX文件中的HTML语法对控件进行样式设计的设计师合作。

Tundey,我们在这里使用SVN。你有没有关于如何实施你的建议的例子? SVN如何共享ASP.NET控件?

谢谢!

回答

5

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

1

另一种方法是使用源代码管理工具在您的web应用程序之间“共享”ASCX控件。这将允许您对任一应用程序中的控件进行更改,并使源代码控制确保更改反映在我们的Web应用程序中。

0

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

0

在Windows创建路口我已经在ASP.Net控件发现最大的问题是,你不能很容易地得到两个使用控制楼宇控制设计器支持在你建立它的网站上。我能做到的唯一方法是创建一个没有代码隐藏的.ascx控件(即:所有服务器端代码都在带有runat =“server”属性的.ascx文件中的脚本标记中) 。

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

1

我设法做到这一点,首先牺牲了一些轻松构建控件。

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

这里有一个例子:

你把在Text属性
<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 

的东西都会被渲染。

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

15

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

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

+0

我看了一些这些解决方案,这是迄今为止最简单的,如果你有现有的用户控件在网站之间共享。 – 2011-03-04 12:12:40

0

最近我从一个Web应用程序(ASPX,硕士和ASCX),只是引用的文件,Web应用程序(共约90)没有太大的问题的。也就是说,我使用了大量修改版本的MVP pattern,很多接口和约定保持复杂性,同一个中间层和一个站点是另一个的子集。

大问题:

  1. 母版页(进而设计师和HTML视图格式),这样你失去了很多功能都不能在引用的文件工作。预构建步骤和很多svn:忽略条目是我的破解。让CruiseControl.NET获得预构建任务在正确的文件夹中执行也是一件痛苦的事情。
  2. 共享页面/控件需要非常了解它们的接触和引用,以避免引入额外的依赖关系。
  3. 两个站点都锁定在一起进行部署。
  4. 我现在不得不祈祷维护者阅读我关于我所做的一团糟的小小文档。这远远超出了我在ASP.NET项目中看到的。

我受到巨大的时间压力才能使其运行,它现在和现在都在生产应用程序。我不会推荐它,但如果你有兴趣开始:

添加现有项,选择一些文件,点击添加按钮的箭头并说添加为链接

2

除了什么Tundey说,NTFS链接外壳扩展是有帮助的,当谈到另有独立项目之间共享内容的很大一部分(例如:用的.ascx /的.aspx文件夹)。在代码的情况下,我认为从VCS制作另一个工作副本是可取的。

0

我有一个suggestion.WE可以通过创建网站项目中的用户控件使用用户控制整个倍数应用程序normally.Then更改网站属性中使用固定命名和单页组件那么我们可以将用户控件dll用于多个应用程序。

相关问题