简体   繁体   English

Asp.Net 2自定义服务器控件属性

[英]Asp.Net 2 Custom Server Controls Properties

I am having a very hard time finding a standard pattern / best practice that deals with rendering child controls inside a composite based on a property value. 我很难找到一种标准模式/最佳实践,该标准模式/最佳实践涉及基于属性值在复合结构内部呈现子控件。

Here is a basic scenario. 这是一个基本方案。 I have a Composite Control that has two child controls, a textbox and a dropdown. 我有一个具有两个子控件,一个文本框和一个下拉列表的复合控件。 Lets say there is a property that toggles which child to render. 可以说有一个属性可以切换要渲染的子级。

so: 所以:

myComposite.ShowDropdown = true;

If true, it shows a dropdown, otherwise it shows the textbox. 如果为true,则显示一个下拉列表,否则显示文本框。

The property value should be saved across postbacks, and the the correct control should be displayed based on the postback value. 该属性值应在回发之间保存,并且应基于回发值显示正确的控件。

Any good examples out there? 有什么好的例子吗?

You use ViewState to store property value so that it persists between postbacks but you have to do it correctly . 您可以使用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;
      }
   }
}

Probably somewhere in your Render method you show or hide DropDown control based on the property value: 大概在Render方法的某个位置,您可以基于属性值显示或隐藏DropDown控件:

dropDown.Visible = ShowDropDown;
textBox.Visible = !ShowDropDown;

See also Composite Web Control Example . 另请参见Composite Web Control示例

I would think something like: 我会想这样的:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM