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. Что не так сделано и как это можно исправить?
<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. Что не так сделано и как это можно исправить?