1

我很难找到一个标准模式/最佳实践来处理基于属性值在复合材料中呈现子控件。

这是一个基本场景。我有一个复合控件,它有两个子控件、一个文本框和一个下拉列表。假设有一个属性可以切换要渲染的孩子。

所以:

myComposite.ShowDropdown = 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 回答