Я следил за статьей ДЕЙСТВИТЕЛЬНО Понимание ViewState (кстати, отличная статья), и заполнение моего выпадающего списка работает отлично. Я даже настроил событие OnSelectedIndexChange, которое срабатывает почти так же хорошо.
Проблема, которую я обнаружил, заключается в том, что событие SelectedIndexChanged не срабатывает при выборе 0-го индекса. Однако это происходит во все другие времена.
Вот код:
<asp:DropDownList runat="server" ID="DropDownList1" EnableViewState="false"
AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />
protected override void OnInit(EventArgs e)
{
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataSource = fillQueueDropDown();
this.DropDownList1.DataBind();
base.OnInit(e);
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
OnSelectedQueueChanged(e);
}
public void OnSelectedQueueChanged(EventArgs e)
{
// Do stuff.
}
public event EventHandler queueNamesChangedEvent;
public void OnSelectedQueueChanged(EventArgs e)
{
if (queueNamesChangedEvent != null)
queueNamesChangedEvent(this, e);
}
Я полагаю, что могу выполнить некоторую проверку в методе Page_Load:
if(ViewState["selectedIndexChangedFlag"] != 1)
// raise OnSelectedChange event
Или есть что-то, что я могу настроить в методе OnInit(), где я каждый раз перепривязываю эти данные?
Видите ли, мой пользовательский EventHander вызывает событие, которое перехватывается родительской страницей, на которой находится этот элемент управления, чтобы родитель мог выполнить какое-либо действие, используя вновь выбранное значение. И это в настоящее время работает для всех случаев, когда выбранный индекс > 0.
Я создаю свойство в этом элементе управления, которое содержит последний выбранный индекс, и в этом случае моя родительская страница может действовать со значением этого свойства при каждой загрузке Page_Load... не знаю.
Открыт для предложений. Или как заставить это событие SelectedIndexChanged срабатывать для этого выбора 0-го индекса.