17

Visual Studio 2010 で Web サイト プロジェクトをビルドしようとすると、次のエラーが発生します。

ページ '/WebSite/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 ディレクティブを追加することで修正できることを認識しています...:

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

...しかし、よりクリーンなソリューションがあるかどうか疑問に思っています。そもそもなぜエラーが発生するのですか?

4

2 に答える 2

26

可能な唯一の解決策は次のとおりです。

  • コントロールを、outer.ascx と現在共有しているディレクトリから移動するか、または
  • 既に述べたように、outer.ascx 内のコントロールを再登録します。
  • 別のライブラリのコントロールとしてコードでそれらを書き直します

個人的には、ソリューションに適している場合は、移動が最も簡単だと思います。2 つ目は、面倒ではありますが、再登録することです。それらを完全なコード ライブラリに抽象化することが唯一の理由である場合、おそらく努力する価値はありません。

于 2011-08-15T13:24:26.553 に答える
6

コントロールを別のフォルダーに配置することもできます。しかし、これがはるかにクリーンまたは優れているとは思いません。

ところで: このMSDN ページで読むことができるように、この動作は仕様によるものです(ページのほぼ最後にある黄色いメモを探してください)。

于 2011-08-15T13:30:54.343 に答える