Asp.net

ASP.NET 錯誤:頁面 Y.ascx 無法使用使用者控制項 X.ascx

  • September 17, 2018

嘗試在 Visual Studio 2010 中建構網站項目時出現以下錯誤:

頁面’/WebSite/controls/C2.ascx’ 不能使用使用者控制項’/WebSite/controls/C1.ascx’,因為它在web.config 中註冊並且與頁面位於同一目錄中。

我有 2 個網路使用者控制項:

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 指令來解決此問題…:

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

…但我想知道是否有更清潔的解決方案,為什麼我首先會收到錯誤?

您唯一可能的解決方案是:

  • 將控制項移出目前與 outer.ascx 共享的目錄,或
  • 像您已經提到的那樣在 external.ascx 中重新註冊控制項
  • 在程式碼中將它們重寫為單獨庫中的控制項

我個人認為移動是最簡單的,如果它適用於您的解決方案。其次是重新註冊,儘管很煩人。如果這是您這樣做的唯一原因,那麼將它們抽象成一個完整的程式碼庫可能不值得。

引用自:https://stackoverflow.com/questions/7065080