我很难找到一个标准模式/最佳实践来处理基于属性值在复合材料中呈现子控件。
这是一个基本场景。我有一个复合控件,它有两个子控件、一个文本框和一个下拉列表。假设有一个属性可以切换要渲染的孩子。
所以:
myComposite.ShowDropdown = true;
如果为真,则显示下拉菜单,否则显示文本框。
属性值应跨回发保存,并应根据回发值显示正确的控件。
有什么好的例子吗?
我很难找到一个标准模式/最佳实践来处理基于属性值在复合材料中呈现子控件。
这是一个基本场景。我有一个复合控件,它有两个子控件、一个文本框和一个下拉列表。假设有一个属性可以切换要渲染的孩子。
所以:
myComposite.ShowDropdown = true;
如果为真,则显示下拉菜单,否则显示文本框。
属性值应跨回发保存,并应根据回发值显示正确的控件。
有什么好的例子吗?
您使用 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 控件示例。
我会认为是这样的:
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 */