0

サブクラス A1、A2、A3 を持つ抽象クラス IA があるとします。

サブクラスごとに、挿入/編集/表示する FormView を含むページと、そのクラスに固有のコードを用意しました。挿入/編集/表示用のテンプレートはすべて非常に似ているため、ほとんどがカット アンド ペーストであり、異なるテンプレートに同じ ID を持つコントロールが存在してもコンパイラは問題ありませんでした。

このようなもの:

<asp:FormView>
    <InsertItemTemplate>
        <asp:Label id="Label1" />
    </InsertItemTemplate>
    <EditItemTemplate>
        <asp:Label id="Label1" />
    </EdittItemTemplate>
</asp:FormView>

コード/マークアップの多くはページ全体で冗長になってしまったので、マスター/コンテンツ形式を使用するようにリファクタリングし、マスター ページには挿入/編集/表示テンプレート用のコンテンツ プレースホルダーを配置しました。

マスター ページ:

<asp:FormView>
    <InsertItemTemplate>
        <asp:ContentPlaceHolder ID="InsertItemTemplate"></asp:ContentPlaceHolder>
    </InsertItemTemplate>
    <EditItemTemplate>
        <asp:ContentPlaceHolder ID="EditItemTemplate"></asp:ContentPlaceHolder>
    </EdittItemTemplate>
</asp:FormView>

そしてコンテンツページ:

<asp:Content ContentPlaceHolderID="InsertItemTemplate">
    <asp:Label id="Label1" />
</asp:Content>
<asp:Content ContentPlaceHolderID="EditItemTemplate">
    <asp:Label id="Label1" />
</asp:Content>

コンテンツ ページ テンプレートでは、リファクタリングする前とまったく同じことを行っていますが、コンパイラがエラーで爆発しています。BC30260: 'Label1' is already declared as 'Protected WithEvents Label1 As System.Web.UI.WebControls.Label' in this class.

何らかの理由で、コンテンツ プレースホルダーが個々のテンプレートにあるにもかかわらず、コンテンツ ブロックのコントロールがテンプレートにあったときと同じ方法で分離されていません。

すべてのコントロールの名前を変更する以外に、これを回避する方法はありますか?

4

1 に答える 1

0

私はこの質問としてこの戦術をあきらめています:マスターページのFormViewは、ContentPlaceHolder境界を介してデータバインドされたコントロールを見ることができないため、これが私が望むように機能するという希望を破壊しているようです。

于 2010-04-27T23:46:33.403 に答える