自定义WebControls.DropDownList视图状态

本文关键字:视图状态 DropDownList WebControls 自定义 | 更新日期: 2023-09-27 18:08:40

我正在尝试创建一个自定义web控件,这只是一个简单的下拉列表,它预装了美国的所有州。它在大多数情况下是工作的,但是在发布后,控件恢复到其初始状态。(我能够在帖子中获得所选值)。我需要实现什么,以使列表保留它的选择项目后发回?

这是我的控制类:
[DefaultProperty("Text")]
[ToolboxData("<{0}:StateDropDownList runat=server></{0}:StateDropDownList>")]
public class StateDropDownList : DropDownList
{
    private void Populatedropdown()
    {
        this.Items.Clear();
        this.Items.Add(new ListItem("Alabama", "AL"));
        /* the rest .... */
        this.Items.Add(new ListItem("Wyoming", "WY"));
    }
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        Populatedropdown();
    }
}

编辑

当控件从数据源反弹时,这不是问题。这个自定义控件的目标是避免需要不断地从状态表中绑定下拉列表。我要解决的问题是如何在回发时维护此自定义下拉菜单的选定值?

自定义WebControls.DropDownList视图状态

private void Populatedropdown()
{
    if(this.Items.Count == 0)
    {
      this.Items.Clear();
      this.Items.Add(new ListItem("Alabama", "AL"));
      /* the rest .... */
      this.Items.Add(new ListItem("Wyoming", "WY"));
    }
}

您将ListItems添加到控制生命周期的后期。

移动你的Populatedropdown调用到OnInit方法,你的问题应该会消失。

你在做这个吗?

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //only bind the control when the page is first loaded
            myControl.DataBind();
        } 
    }