2010-06-03 28 views
18

我在ASP.NET页面2的运行时间得到这个消息:使用用户控制

页“MyFolder中/ blabla.aspx”不能使用用户控制“MyFolder文件/ MyControl.ascx ',因为它在web.config中注册并与页面位于同一目录中。

当然,我可以将它们分开到2个不同的文件夹,从而解决这个问题,但问题是:

WTF!?!?!为什么我不能把它们放在同一个文件夹中?! 为什么他们都不能......相处!?! :)

感谢

+0

有趣的是,我得到这个相同的确切的错误,我有一个包含另一个控件的控件。它甚至会说“The page'MyCONTROL.aspc'...”。 Page!=控制。所以我猜想在一个目录中有多个控件是个问题。 – sparebytes 2012-05-23 20:46:14

回答

10

这一限制是设计由于内部设计考虑重新:性能。

有关更多信息,请参阅here

备注

的TagPrefixInfo类允许您以编程方式访问和 修改存储在配置文件中的标签前缀信息。它 提供了与ASP.NET @Register 指令相同的功能。标记前缀将ASP.NET中的“命名空间”与 程序集和命名空间相关联,这些命名空间必须包含在自定义控件 和用户控件中才能正常工作。 TagPrefixInfo对象作为TagPrefixCollection对象的成员存储在 中。该 TagPrefixCollection类允许您以编程方式访问 和修改控制款的页面 配置文件的节。

TagPrefixInfo物体通过使用添加 元件以及指定用于沿着 的的TagPrefix属性与其他相关属性值的值添加到集合。其他需要 信息变化的基础上的一种控制,你会与 指定标记前缀使用:

  • 如果它是一个用户控件,你必须定义TagPrefixTagNameSource性能。
  • 如果是自定义控件,则必须定义TagPrefix,NamespaceAssembly属性。如果控件位于应用程序代码 目录中,则不需要属性Assembly 。同样的tagPrefix值可用于映射到多个 程序集或名称空间。

注意当指定源时,用户控件本身不能与页面位于同一目录中。如果是这样,当您尝试加载页面时,会出现运行时 错误。

2

我怀疑你可以不注册它,如果它是必不可少的。 你可能有一个PlaceHolder,然后使用.Controls.Add(LoadControl(“path.ascx”))

但是,如果它不是必需的,然后把它放在不同的目录由于@Barry说的原因。

6

如果您在页面或用户控件中注册它而不是web.config,它将正确加载。 将以下内容添加到页面的顶部。

<%@ Register TagPrefix="MyControlTagPrefix" TagName="MyControlTagName" Src="~/MyFolder/MyControl.ascx" %>