DropDownList в составном элементе управления теряет выбранное значение при обратной передаче - PullRequest
0 голосов
/ 23 февраля 2010

Я создаю составной серверный элемент управления, который в настоящее время имеет только 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);
    }
}

Похоже, что элемент управления работает корректно для всех обратных передач, то есть до тех пор, пока не будут установлены декларативные значения, например ::100100

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

После этого текстовое поле продолжает работать корректно, но член _state не принимает возвращенные значения и вместо этого просто придерживается объявленного значения. Я проверил необработанные отправленные значения в объекте Request, и новое значение для UniqueID списка есть, но _state не получает его.

Я почти уверен, что это будет что-то очевидное, но я просто вращаю свои колеса здесь.

1 Ответ

1 голос
/ 23 февраля 2010

Это происходит потому, что вы добавляете ListItems при каждой загрузке страницы. Не создавайте заново элементы списка в PostBack, ViewState восстановит их.

...