是否可以创建包含用户界面控件(UserControls)的类库以便重用? 如果可以,怎么做? 标记语言(markup) 是否随着 .dll 文件一起编译? 感谢任何帮助!
是否可以创建包含用户界面控件(UserControls)的类库以便重用? 如果可以,怎么做? 标记语言(markup) 是否随着 .dll 文件一起编译? 感谢任何帮助!
UserControl
和Page
编译成类库,因为在您的网站经过及时编译后,这就是最终结果。这个过程有点复杂,因为UserControl
和Page
实际上并不适用于跨应用程序使用。对于将要在多个应用程序中使用的控件,首选方法是创建自定义Web服务器控件。UserControl使您能够创建可在应用程序或组织内多处使用的控件
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx
UserControl
,则获得此功能的基本过程如下:
UserControl
。从已发布的网站中的bin目录复制编译后的库和需要的ascx文件到新网站中。
是的,正如第四点所述,您需要复制ascx文件。标记将包含在类库中,而ascx实际上将为空。除非使用自定义Web服务器控件,否则无法避免这种情况,因为通过它们的文件名将UserControl
添加到Page
中。
所有这些都在MSDN上有更详细的文档说明。
更新:我在使用预编译的用户控件时给出的提示是正确的,就像使用普通用户控件一样。
具体步骤请参见将.ascx用户控件转换为可重新分发的自定义控件
在您使用它的项目中不需要任何.ascx文件,因此完全符合您的要求。
用户控件并不适用于在多个站点之间重复使用,请使用自定义服务器控件。
您可以使用现有控件组合服务器控件,并设置所有内容以便通过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文件,所以那可能不是你要找的东西,即尝试上述方法,如果不行就坚持使用自定义服务器控件。
听起来你需要自定义服务器控件。
如果你的控件是其他服务器控件的组合(例如,一个文本框和一个按钮用于日期控件),那么你可以看看CompositeDataBoundControl和CompositeControl - 这些都是处理这种情况的方便方法。
但要注意,页面周期/视图状态重新加载的工作方式很容易让人感到困惑。由于对其应该如何工作的微妙误解,我已经浪费了相当多的时间。
http://aspnetresources.com/blog/composite_databound_control.aspx
您可以从dll中提供用户控件。 您只需要创建一个自定义VirtualPathProvider来加载控件。 这基本上就是SharePoint所做的。
这是微软的一篇文章,解释了该过程:
http://support.microsoft.com/kb/910441
您也可以搜索“VirtualPathProvider”。
此示例从数据库加载代码,但您可以修改它以从程序集中作为嵌入资源加载代码。我们在公司中这样做是为了在许多站点和应用程序域之间共享主页面。
但要注意一点,这在中等信任环境中不起作用。因此,如果您计划将其部署到共享托管环境中,请先在您的主机上进行测试以查看它是否有效。