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