Решение вопроса выбора первого элемента в выпадающем списке и последующих событий - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть выпадающий список на моей странице aspx, который я связываю с источником данных.Я заметил, что выбор первого элемента не вызвал событие selectedindexchange.Отправляясь на поиски ответа, я обнаружил, что наиболее распространенная вещь - это поместить первый элемент в ddl, либо с пустой строкой, либо с чем-то вроде «--- Select ---».

Отлично, это сработало.Но потом я заметил, что он все еще запускает мое событие Page_Load.В моем событии Page_Load я проверяю обратную передачу.Если это не так, он связывается с ретранслятором и ddl.Так что получается, что при выборе первого элемента в ddl привязка данных к повторителю и ddl пропускается, и я получаю пустую страницу.

Сначала я подумал, что могу это исправить, включив viewstate, но, увы.После этого я добавил в свой код следующее, но я действительно чувствую, что это выглядит странно.У кого-нибудь есть идея получше?

if (!IsPostBack || RacesDropDownList.SelectedIndex == 0)
{
    PopulateControls();
}

1 Ответ

0 голосов
/ 08 декабря 2010

Прежде всего вам нужно включить viewstate. Если обратной передачи не произошло, необходимо связать выпадающий список с источником данных. Сделайте это, просто добавив следующее к событию Page_Load:

if (!IsPostBack)
{
    PopulateControls();
}

Имейте в виду, что выбранный индекс по умолчанию всегда равен 0, и если он изменился, произойдет обратная передача, поэтому исходный код уже пропустит привязку данных из-за условия! IsPostBack => '|| RacesDropDownList.SelectedIndex == 0 'вообще не нужен.

Затем, если в каком-либо событии вам нужно обновить список, обычное решение - запустить функцию PopulateControls () в обработчике событий, а не в Page_Load ().

Например:

protected SelectedIndexChanged(...)
{
// Do something
changeCounter++;

// Not necessary, but good to have
ClearControlsCurrentValues();

// Populate the control again
PopulateControls();
}

Надеюсь, это поможет.

...