2008-10-03 90 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

相关问题