2011-08-15 40 views
17

我正在试图建立网站项目在Visual Studio 2010时,下面的错误:ASP.NET错误:页面Y.ascx不能使用用户控制X.ascx

页“/网址/controls/C2.ascx'无法使用用户控件'/WebSite/controls/C1.ascx',因为它在web.config中注册并与页面位于同一目录中。

我有2个Web用户控件:

controls/C1.ascx 
controls/C2.ascx 

的控制已被注册在web.config中:

<configuration> 
    <system.web> 
     <pages> 
      <controls> 
       <add src="~/controls/C1.ascx" tagPrefix="my" tagName="C1"/> 
       <add src="~/controls/C2.ascx" tagPrefix="my" tagName="C2"/> 
      </controls> 
     </pages> 
    </system.web> 
</configuration> 

C1.ascx只包含一个静态的HTML,C2.ascx试图包括C1:

C1.ascx只包含一些简单的静态简单HTML。 C2.ascx试图包含C1.ascx:

<%@ Control Language="VB" %> 
<my:C1 runat="server" /> 
<p>Hello from C2</p> 

当试图构建项目时,我收到了顶部的错误消息。我意识到这个问题可以通过添加另一个注册指令C2.ascx固定...:

<%@ Register Src="~/controls/C1.ascx" TagPrefix="ctl" TagName="C1" %> 

...但我不知道是否有一个清晰的解决方案,为什么会收到错误在第一地点?

谢谢!

+0

[在与页面相同的文件夹中使用用户控件]可能的重复(http://stackoverflow.com/questions/2964337/use-user-control-in-the-same-folder-as-the-page ) – M4N

+0

为什么<%@ Register ...%>被认为是“不洁净”?似乎与在.cs文件顶部使用语句没有什么不同。 – mikemanne

+0

只有当控件已经在web.config中为每个页面或Web用户控件注册时,才会认为这是不正确的,这是我的情况。 – michalstanko

回答

25

你唯一可能的解决方案是:

  • 移动控制了其目前与outer.ascx共享目录,或
  • 已经重新注册控制outer.ascx里面喜欢你提到
  • 他们的代码在一个单独的库重新编写作为对照

我个人认为移动是最简单的,它是否会为你的解决方案的工作。其次会重新注册,即使很烦人。如果这是你做这件事的唯一原因,将它们抽象成完整的代码库可能不值得。

+4

重新注册对我来说是最好的选择,我不想将用户控件移动到另一个子文件夹中,这是因为ASP.NET有时会出现奇怪的行为。谢谢。 – michalstanko

+3

多么愚蠢的错误。重新注册也适用于我。 – TheGateKeeper

5

您也可以将控件放到不同的文件夹中。但我认为这不是更清洁或更好。

顺便说一句:这种行为是通过设计,因为你可以阅读on this MSDN page(几乎在页面的末尾查找黄色注释)。

相关问题