2008-10-03 89 views
1

我有一個很難找到一個標準模式/最佳做法,處理基於屬性值複合內部的子控件。Asp.Net 2自定義服務器控件屬性

這是一個基本的場景。我有一個複合控件有兩個子控件,一個文本框和一個下拉菜單。可以說有一個屬性可以切換要渲染的孩子。

這樣:

myComposite.ShowDropdown = true; 

如果爲true,則顯示一個下拉,否則它顯示的文本。

屬性值應跨回發保存,並應根據回發值顯示正確的控件。

那裏有很好的例子嗎?

回答

3

您使用ViewState中存儲的屬性值,使其回發之間依然存在,但你必須這樣做correctly

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.Visible = ShowDropDown; 
textBox.Visible = !ShowDropDown; 

Composite Web Control Example見。

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 */ 
+0

如果此屬性未由調用者設置,您將在get方法中得到NullReferenceException。 – 2008-10-03 23:53:20

相關問題