1

プロパティ値に基づいてコンポジット内で子コントロールをレンダリングする標準パターン/ベストプラクティスを見つけるのに非常に苦労しています。

これが基本的なシナリオです。テキスト ボックスとドロップダウンの 2 つの子コントロールを持つ複合コントロールがあります。どの子をレンダリングするかを切り替えるプロパティがあるとします。

それで:

myComposite.ShowDropdown = true;

true の場合はドロップダウンを表示し、それ以外の場合はテキスト ボックスを表示します。

プロパティ値はポストバック間で保存する必要があり、ポストバック値に基づいて正しいコントロールを表示する必要があります。

良い例はありますか?

4

2 に答える 2

3

ViewState を使用してプロパティ値を保存し、ポストバック間で保持されるようにしますが、正しく行う必要があります。

public virtual bool ShowDropdown
{
   get
   {
      object o = ViewState["ShowDropdown"];
      if (o != null)
         return (bool)o;
      return false; // Default value
   }
   set
   {
      bool oldValue = ShowDropdown;
      if (value != oldValue)
      {
         ViewState["ShowDropdown"] = value;
      }
   }
}

おそらく、Render メソッドのどこかで、プロパティ値に基づいて DropDown コントロールを表示または非表示にします。

dropDown.Visible = ShowDropDown;
textBox.Visible = !ShowDropDown;

複合 Web コントロールの例も参照してください。

于 2008-10-03T23:49:22.513 に答える
0

私は次のように考えます:

public bool ShowDropDown
{
    get{ return (bool)ViewState["ShowDropDown"]; }
    set{ ViewState["ShowDropDown"]; }
}


private  void Page_Load(object sender, EventArgs e)
{
    DropDaownControl.Visible = ShowDropDown;
    TextBoxControl.Visible = !ShowDropDown;
} 
/* some more code */
于 2008-10-03T22:51:18.123 に答える