ListBox не запускает событие OnSelectedIndexChanged при изменении SelectedIndex - PullRequest
1 голос
/ 24 августа 2010

У меня есть страница asp.net со списком. Несколько обработчиков событий подписываются на его OnSelectedIndexChanged событие.

Когда я изменяю SelectedIndex программно , ни одно из событий не запускается.

Теперь хаком для этого является вызов каждого обработчика событий, но это уже вызвало ошибки, так как люди не знали, что они должны были делать это при добавлении нового обработчика событий.

Я могу сделать это в приложении Winforms, и даже когда SelectedIndex изменен в коде, события запускаются. Кто-нибудь видел это раньше?

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Посмотрите на исходный код класса ListBox и его базу - ListControl.Вы заметите, что метод OnSelectedIndexChanged вызывается из метода RaisePostDataChangedEvent.Это означает, что событие SelectedIndexChanged возникает только в том случае, если выбранный индекс был изменен на стороне клиента, а значение, сохраненное в ViewState, не равно данным, поступающим с PostData.Таким образом, это событие не должно вызываться, если SelectedIndex был изменен в коде сервера.

0 голосов
/ 24 апреля 2018

В качестве обходного пути я изменяю данные в базе данных и выпускаю завершенные события, затем перезагружаю данные с помощью JavaScript.

Сцены: элемент управления ASPxGridView удаляет строку dtgRepair, в то же время значение ASPxComboBox изменялось программно.

Сервер:

protected void dtgRepair_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
{    
// update database here...
cmbMRType.SelectedIndex = 1;
dtgRepair.JSProperties["cpCallbackAction"] = "DeleteEntry";
}  

Клиент:

function dtgRepair_EndCallback(s,e) { 
    if(cmbMRType.GetSelectedIndex() == 2 && dtgRepair.cpCallbackAction == "DeleteEntry" ) 
        window.location.reload(true);
}
...