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

Posted

技术标签:

【中文标题】ASP.NET:通过命名空间一次注册多个控件?【英文标题】:ASP.NET: Register multiple controls at once via namespace? 【发布时间】:2011-07-08 04:33:45 【问题描述】:

是否可以在 aspx 文件中注册一个完整的用户控件命名空间,而不是单独注册每个控件?

我创建了一堆用户控件并将它们收集到自己的命名空间“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。

【问题讨论】:

注册编译成程序集的服务器控件时,只能使用程序集和命名空间属性:-( 好的,我发现它不是这样工作的。但是有没有别的办法呢? @atticae 您可以在 web.config 中注册您的用户控件,以便它们在您的所有页面中可用,而不是在每个页面中单独注册它们。这是我现在唯一能想到的可以帮助你的事情。 我开始赏金,希望有人知道一种巧妙的方法来一次注册整个控件命名空间。如果没有,倒霉。我只是认为值得再试一次,因为这将是一个有用的功能。 如果您的控件在 .ascx 文件中,除了一个一个注册您的控件之外别无他法。您可以使用 T4 之类的东西从某些文件夹的内容中自动为您生成注册标签。 【参考方案1】:

使用用户控件是没有办法做到这一点的 :-( 您只能使用 namespaceassembly 属性从程序集中引入控件,并且用户控件不能很好地导出到单独的程序集(我怀疑这与用户控件具有单独代码和标记的方式有关)。

如果您真的对此有信心,则需要将用户控件转换为服务器控件 - CodeProject here 上有一段看起来可能会提供一些快捷方式这样做。

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

<add tagprefix="ucs" tagname="MyFirstControl" src="~/UserControls/MyFirstControl.ascx" />

【讨论】:

【参考方案2】:

全球注册

system.web/pages/controls 下的 web.config 中

<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>

在 msdn.microsoft.com/en-us/library/ms164640.aspx 上可以找到有关 .NET 4.0 中 web.config 的这一部分的文档。

本地注册

您的@Register 指令不起作用的原因是您省略了程序集属性。这条线应该看起来像

<%@ Register TagPrefix="ucs" Namespace="MyWebControls" Assembly="MyAssemblyName" %>

详情请见this related post。

【讨论】:

您能否提供一个示例,我如何在那里注册整个命名空间? 我会在“组装”中添加什么?我的控件不在单独的程序集中,它们在 ASP.NET 应用程序本身中。那里的问题几乎和我直接放在页面中一样。 转到您的项目属性,复制并粘贴程序集名称 再次,请您说得更具体些。我在我的 ASP.NET 网站的项目属性中没有看到任何程序集名称。我在哪里可以找到它? 复制并粘贴您的 web.config。

以上是关于ASP.NET:通过命名空间一次注册多个控件?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net揭秘读书笔记

ASP.NET上传控件上传图片

细说.net core Startup

ASP.NET 命名空间

命名空间“系统”中不存在类型或命名空间名称“事务”(您是不是缺少程序集引用?) - C# ASP.NET

ASP.NET 中的 Javascript 命名空间声明