是否可以在aspx-File中注册一个完整的usercontrol名称空间,而不是单独注册每个控件?
我创建了一堆用户控件并将它们收集到一个自己的命名空间“MyWebControls”中,如下所示:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="LevelFilter.ascx.cs" Inherits="MyWebControls.LevelFilter" %>
代码隐藏:
namespace MyWebControls
{
public partial class LevelFilter : System.Web.UI.UserControl
{
...
}
}
我现在尝试将它们包含在我的页面中(以及什么不起作用):
<%@ Register Namespace="MyWebControls" TagPrefix="ucs" %>
...
<ucs:LevelFilter />
有没有办法做到这一点?显然它适用于像AjaxControlToolkit这样的外部程序集,所以我想这应该是可能的。
我正在使用ASP.NET 4.0。
答案 0 :(得分:6)
使用用户控件时,根本无法执行此操作:-(您只能使用namespace
和assembly
属性从程序集中引入控件,并且用户控件不会导出到单独的组装非常好(我怀疑它与用户控件具有单独代码和标记的方式有关)。
如果你真的已经设置了你的心脏,你需要将你的用户控件转换为服务器控件 - 在CodeProject here上有一个看起来可能会提供一些这样做的捷径。
否则,我最好的建议是在web.config中集中注册所有用户控件,以便所有页面都可以使用它们。为此,请在system.web/pages/controls
下的web.config中添加以下内容:
<add tagprefix="ucs" tagname="MyFirstControl" src="~/UserControls/MyFirstControl.ascx" />
答案 1 :(得分:5)
在system.web/pages/controls
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.
<add tagPrefix="ucs" namespace="MyWebControls" assembly="MyAssemblyName" />
</controls>
有关.NET 4.0中这部分web.config
的文档,请访问msdn.microsoft.com/en-us/library/ms164640.aspx。
您的@Register
指令不起作用的原因是您省略了assembly属性。该行应该看起来像
<%@ Register TagPrefix="ucs" Namespace="MyWebControls" Assembly="MyAssemblyName" %>
有关详细信息,请参阅this related post。