2011-08-15 44 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(幾乎在頁面的末尾查找黃色註釋)。

相關問題