ASP.NET UserControl类库

时间:2009-11-19 19:22:11

标签: asp.net user-controls

是否可以创建包含UserControls的类库,以便我可以重用它们?如果是这样,怎么样?标记是用.dll编译的吗?谢谢你的帮助!

6 个答案:

答案 0 :(得分:9)

您可以将UserControlPage编译到类库中,因为最终,这是在您的网站just in time编译后发生的情况。这个过程有点牵扯,因为实际上UserControlPage并不是跨应用程序使用的。

来自MSDN:

  

UserControl使您能够创建可在应用程序或组织中的多个位置使用的控件

     

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx

将在应用程序之间使用的控件的首选方法是创建custom web server controls

如果您真的想坚持使用UserControl,那么获得此功能的基本过程如下:

  1. 制作新的web application project
  2. 开发可重复使用的UserControl s。
  3. 将网站发布为不可更新的*网站。 (取消选中“允许此站点可更新”)
  4. 将已编译的库从bin目录和 ascx 文件从发布的站点复制到新站点中。

    • 不可更新选项是将标记带入程序集的原因。这是重要的一步。
  5. 是的,作为第四点状态,您需要复制 ascx 文件。标记将包含在类库中, ascx 实际上将为空。没有办法避免这种情况(除非您使用custom web server controls),因为UserControl已通过其文件名添加到Page

    所有这些都在MSDN上详细记录,

    http://msdn.microsoft.com/en-us/library/aa479564.aspx

答案 1 :(得分:6)

更新:我提示使用预编译的用户控件,就像用户控件一样。

有关如何逐步完成,请参阅Turning an .ascx User Control into a Redistributable Custom Control

项目中您不需要使用任何.ascx文件,因此这与您正在寻找的内容完全匹配。


用户控件不应跨网站重复使用,而是使用custom server controls

您可以使用现有控件编写服务器控件,并将其全部设置为可以通过css设置样式。

如果您仍在使用用户控制方法,请尝试Bob在答案中提到的内容。我没有使用用户控件,但我希望能够使用该方法的输出,就像使用自定义服务器控件一样。

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%>
...
<aspSample:WelcomeLabel Text="Hello" NameForAnonymousUser="Guest" 
   ID="WelcomeLabel1" runat="server" BackColor="Wheat" ForeColor="SaddleBrown" />

聚苯乙烯。如果这不起作用,他提供的链接告诉你无论如何都要复制ascx文件,这样就不会是你想要的那个,而不是上面的&amp;如果不坚持自定义服务器控件。

答案 2 :(得分:0)

您可能希望转而考虑Server Controls。 AFAIK您无法将用户控件编译为单个DLL。

答案 3 :(得分:0)

如果我们谈论网络表格,答案是否定的。标记(.ascx文件内容)未编译到dll中。 ASP.NET引擎希望在文件系统中找到此文件以及Web应用程序。因此,无法创建可以简单地重新分发或共享的DLL。

如果要创建可以在Web应用程序之间共享的控件,您可以改为创建自定义控件,但是您必须使用.net代码编写HTML代码(优先使用适当的类来完成任务而不仅仅是在文本中创建html),如果控件很大,这可能会非常难看。

就我个人而言,我认为这是非常烦人的。

但是,我认为,如果您使用的是ASP.NET MVC,则有一些可能性(取决于您的视图引擎),但我对MVC没有太多经验。

答案 4 :(得分:0)

听起来好像您正在寻找自定义服务器控件。

如果您的控件是其他服务器控件的组合(例如文本框和日期控件的按钮),那么您可以查看CompositeDataBoundControl和CompositeControl - 这些是处理此类事情的便捷方法。

但要注意,很容易被页面循环/视图状态重新水化的方式弄糊涂。由于对它应该如何运作的微妙误解,我已经失去了相当多的时间。

http://aspnetresources.com/blog/composite_databound_control.aspx

答案 5 :(得分:0)

您可以从dll提供用户控件。您只需创建一个自定义VirtualPathProvider来加载控件。这绝对是SharePoint所做的。

以下是Microsoft的一篇文章,解释了该过程:

http://support.microsoft.com/kb/910441

您还可以搜索“VirtualPathProvider”。

此示例从数据库加载代码,但您可以修改它以将程序集中的代码作为嵌入资源加载。我们在公司这样做,在许多网站和应用程序域中共享一个母版页。

但是,有一点需要注意。这在中型信任环境中不起作用。因此,如果您计划将其部署到共享托管环境,请确保在您的主机上进行测试,看它是否能够首先运行。