是否可以创建包含UserControls的类库,以便我可以重用它们?如果是这样,怎么样?标记是用.dll编译的吗?谢谢你的帮助!
答案 0 :(得分:9)
您可以将UserControl
和Page
编译到类库中,因为最终,这是在您的网站just in time编译后发生的情况。这个过程有点牵扯,因为实际上UserControl
和Page
并不是跨应用程序使用的。
来自MSDN:
UserControl使您能够创建可在应用程序或组织中的多个位置使用的控件
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx
将在应用程序之间使用的控件的首选方法是创建custom web server controls。
如果您真的想坚持使用UserControl
,那么获得此功能的基本过程如下:
UserControl
s。将已编译的库从bin目录和 ascx 文件从发布的站点复制到新站点中。
是的,作为第四点状态,您需要复制 ascx 文件。标记将包含在类库中, ascx 实际上将为空。没有办法避免这种情况(除非您使用custom web server controls),因为UserControl
已通过其文件名添加到Page
。
所有这些都在MSDN上详细记录,
答案 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”。
此示例从数据库加载代码,但您可以修改它以将程序集中的代码作为嵌入资源加载。我们在公司这样做,在许多网站和应用程序域中共享一个母版页。
但是,有一点需要注意。这在中型信任环境中不起作用。因此,如果您计划将其部署到共享托管环境,请确保在您的主机上进行测试,看它是否能够首先运行。