Войти

Показать полную графическую версию : Проблемма обработчиков событий OnSelectedIndexChanged в DropDownList


DaRiYs
23-11-2011, 00:30
Есть ASP.NET страница которая содержит в себе 3 DropDownList


<asp:DropDownList ID="ddlHour" runat="server" class="maxiSelect" AutoPostBack="true" OnLoad="ddlHour_OnLoad" OnSelectedIndexChanged="ddlHour_OnSelectedIndexChange" />
<asp:DropDownList ID="ddlMinute" runat="server" class="miniSelect" AutoPostBack="true" OnLoad="ddlMinute_OnLoad" OnSelectedIndexChanged="ddlMinute_OnSelectedIndexChange"/>
<asp:DropDownList ID="ddlSecond" runat="server" class="miniSelect" OnLoad="ddlSecond_OnLoad" AutoPostBack="true" OnSelectedIndexChanged="ddlSecond_OnSelectedIndexChanged"/>

И есть код-бихайнд который обрабатывает события этих листов, следующего вида

protected void ddlHour_OnSelectedIndexChange(object sender, EventArgs e)
{
using (DropDownList dropDownList = sender as DropDownList)
{
if (dropDownList != null)
Response.Redirect(WebQueryOperations.ModifyQuery(Request, "Hour", dropDownList.SelectedIndex));
}
}

protected void ddlMinute_OnSelectedIndexChange(object sender, EventArgs e)
{
using (DropDownList dropDownList = sender as DropDownList)
{
if (dropDownList != null)
Response.Redirect(WebQueryOperations.ModifyQuery(Request, "Minute", dropDownList.SelectedIndex));
}
}

protected void ddlSecond_OnSelectedIndexChanged(object sender, EventArgs e)
{
using (DropDownList dropDownList = sender as DropDownList)
{
if (dropDownList != null && dropDownList.SelectedIndex != 60)
Response.Redirect(WebQueryOperations.ModifyQuery(Request, "Second", (sender as DropDownList).SelectedValue));
else
Response.Redirect(WebQueryOperations.ModifyQuery(Request, "Second", 60));
}
}


Метод ModifyQuery изменяет строку запроса в соответствии с выбранными значения листов, возвращает адрес текущей страницы+измененную строку запроса и происходит редирект по этому адресу.
Проблема заключается в том что если мы сперва меняем значение в листе ddlHour тем самым вызывая обработчик ddlHour_OnSelectedIndexChange, то при изменении значений остальных двух листов для них все ровно вызывается обработчик ddlHour_OnSelectedIndexChange. Что не так сделано и как это можно исправить?

Delirium
23-11-2011, 01:10
Ну конечно он вызывается, ты же полностью перегружаешь страницу, следовательно индекс меняется на первоначальный. Задача какая стоит? Зачем делать перегрузку страницы после изменения каждого поля? Может быть имеет смысл перегружать по нажатию кнопки, либо выставить autopostback только у секунд, например.

DaRiYs
23-11-2011, 01:49
Дело вот еще в чем, я переделал этот код и сделал 1 общий обработчик для всех листов, но теперь еще проблемма в том что кнопка Submit у которой есть событие ОнКлик, не вызывает его, а этот обработчик листов.

Да и если убрать с обработчика редирект всеровно он вызывается.

Delirium
23-11-2011, 03:16
DaRiYs, ниче не понял, из того, что ты написал. 4 раза перечитал, не въехал, что куда когда и где не обновляется. И сама задача так и не была озвучена.




© OSzone.net 2001-2012