ASP.NET:通过命名空间一次注册多个控件?

mag*_*tic 5 c# asp.net user-controls namespaces

是否可以在aspx-File中注册一个完整的usercontrol名称空间,而不是单独的每个控件?

我创建了一堆usercontrols并将它们收集到一个自己的命名空间"MyWebControls"中,如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="LevelFilter.ascx.cs" Inherits="MyWebControls.LevelFilter" %>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

namespace MyWebControls
{
    public partial class LevelFilter : System.Web.UI.UserControl
    {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在尝试将它们包含在我的页面中(以及什么不起作用):

<%@ Register Namespace="MyWebControls" TagPrefix="ucs" %>
...
<ucs:LevelFilter />
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?显然它适用于像AjaxControlToolkit这样的外部程序集,所以我想这应该是可能的.

我使用的是ASP.NET 4.0.

Phi*_*ove 6

使用用户控件时,没有办法执行此操作:-(您只能使用namespaceassembly属性从程序集中引入控件,而用户控件不能很好地导出到单独的程序集(我怀疑它与用户的方式有关)控件有单独的代码和标记).

如果你真的有你的心脏这一套,你需要将自己的用户控件转换为服务器控件-有一个在CodeProject上的一块在这里,看起来像它可能会提供一些快捷方式这样做.

否则,我最好的建议是在web.config中集中注册所有用户控件,以便所有页面都可以使用它们.为此,在你的web.config下system.web/pages/controls添加它们,如下所示:

<add tagprefix="ucs" tagname="MyFirstControl" src="~/UserControls/MyFirstControl.ascx" />
Run Code Online (Sandbox Code Playgroud)


sma*_*man 5

全球注册

在你的web.config下 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>
Run Code Online (Sandbox Code Playgroud)

有关web.config.NET 4.0中此部分的文档,请访问msdn.microsoft.com/en-us/library/ms164640.aspx.

用于本地注册

您的@Register指令不起作用的原因是您省略了assembly属性.这条线应该是这样的

<%@ Register TagPrefix="ucs" Namespace="MyWebControls" Assembly="MyAssemblyName" %>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此相关帖子.