复合控件中的DropDownList在回发时丢失了选定的值

时间:2010-02-23 02:41:23

标签: asp.net composite-controls

我正在构建一个复合服务器控件,目前只有一个TextBox和一个DropDownList。以下是所有胎儿荣耀的代码:

public Address : CompositeControl
{
    private string[] _states = new string[]
    {
        string.Empty, "ACT", "NSW", "VIC", "QLD", "SA", "WA", "NT", "TAS"
    };
    private TextBox _street;
    private DropDownList _state;

    public string Street
    {
        get { return _street.Text; }
        set { _street.Text = value; }
    }
    public string State
    {
        get { return _state.Text; }
        set { _state.Text = value; }
    }

    public Address() : base()
    {
        EnsureChildControls();
    }

    protected override void CreateChildControls()
    {
        _street = new TextBox();
        _state = new DropDownList();

        _state.Items.AddRange(
            Array.ConvertAll<string, ListItem>(_states, ListItem.FromString));

        Controls.Add(_street);
        Controls.Add(_state);
    }
}

控件似乎在回发之间正常工作,即在设置声明性值之前,例如:

<squee:Address runat="server" ID="a" Street="123 Fake St" State="VIC" />

在此之后,文本框继续正常工作,但_state成员不会获取已发布的返回值,而只是坚持声明的值。我已经检查了Request对象中的原始发布值,并且列表的UniqueID的新值在那里,但是_state没有提取它。

我很确定这会显而易见,但我只是在这里转动。

1 个答案:

答案 0 :(得分:1)

这是因为您在每个页面加载时添加ListItems。不要在PostBack上重新创建列表项,ViewState将恢复它们。