0

ページに 2 つのユーザー コントロールが定義されています。

<%@ Register Src="Foo.ascx" TagName="FooControl" TagPrefix="acme" %>
<%@ Register Src="Bar.ascx" TagName="BarControl" TagPrefix="acme" %>
.
.
.
<acme:FooControl ID="myFoo" runat="server" Visible="false" />
<acme:BarControl ID="myBar" runat="server" Visible="false" />

実行時に、ページのコード内のさまざまな場所でユーザー コントロールのプロパティの 1 つを設定したいと考えています。例えば:

protected void SomeMethod()
{
     if (isSomeCondition) 
     {
         myFoo.Visible = true;         
     }
     else
     {
         myBar.Visible = true;
     }

     // ...

     if (somethingElse) 
     {
         if (isSomeCondition) 
         {
             myFoo.Prop1 = 123;         
         }
         else
         {
             myBar.Prop1 = 123;
         }
     }

     // ...
}

2 つのユーザー コントロールを共通のインターフェイスから継承できることはわかっていますが、別の (おそらくより良い) 方法はありますか?

4

1 に答える 1

1

編集:私の回答のほとんどが、同じ質問へのコメントで既にカバーされていることに気付きました。コメントしてくれた人には申し訳ありませんが、意図的にあなたのコンテンツを「盗んだ」わけではありません... :)

いいえ、同じ結果を達成するためのさまざまな方法を考えることができます(リフレクションを介してプロパティを呼び出すか、 FindControlで何かを解決する) が、両方のコントロールに同じインターフェイスを実装させるよりも良い方法は考えられません。

次に、別のプロパティを介してアクティブなコントロールにアクセスできます。たとえば、次のようになります。

public IMyControl ActiveControl 
{
  get 
  {
    return (isSomeCondition)? myFoo : myBar; 
  }
}
于 2013-01-17T15:56:22.730 に答える