Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Проблемма обработчиков событий OnSelectedIndexChanged в DropDownList (http://forum.oszone.net/showthread.php?t=221234)

DaRiYs 23-11-2011 00:30 1801230

Проблемма обработчиков событий OnSelectedIndexChanged в DropDownList
 
Есть 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 1801243

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

DaRiYs 23-11-2011 01:49 1801264

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

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

Delirium 23-11-2011 03:16 1801313

DaRiYs, ниче не понял, из того, что ты написал. 4 раза перечитал, не въехал, что куда когда и где не обновляется. И сама задача так и не была озвучена.


Время: 11:04.

Время: 11:04.
© OSzone.net 2001-