我有一个很难找到一个标准模式/最佳做法,处理基于属性值复合内部的子控件。Asp.Net 2自定义服务器控件属性
这是一个基本的场景。我有一个复合控件有两个子控件,一个文本框和一个下拉菜单。可以说有一个属性可以切换要渲染的孩子。
这样:
myComposite.ShowDropdown = true;
如果为true,则显示一个下拉,否则它显示的文本。
属性值应跨回发保存,并应根据回发值显示正确的控件。
那里有很好的例子吗?
我有一个很难找到一个标准模式/最佳做法,处理基于属性值复合内部的子控件。Asp.Net 2自定义服务器控件属性
这是一个基本的场景。我有一个复合控件有两个子控件,一个文本框和一个下拉菜单。可以说有一个属性可以切换要渲染的孩子。
这样:
myComposite.ShowDropdown = true;
如果为true,则显示一个下拉,否则它显示的文本。
属性值应跨回发保存,并应根据回发值显示正确的控件。
那里有很好的例子吗?
您使用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;
我想喜欢的事:
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 */
如果此属性未由调用者设置,您将在get方法中得到NullReferenceException。 – 2008-10-03 23:53:20