3

Событие OnSelectedIndexChanged не стреляет для моего раскрывающегося списка. Все форумы, на которые я смотрел, сказали мне добавить AutoPostBack="true", но это не изменило результаты.Dropdown OnSelectedIndexChanged not firing

HTML: за

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="Label1" runat="server" Text="Current Time: " /><br /> 
     <asp:Label ID="lblCurrent" runat="server" Text="Label" /><br /><br /> 
     <asp:DropDownList ID="cboSelectedLocation" runat="server" AutoPostBack="true" OnSelectedIndexChanged="cboSelectedLocation_SelectedIndexChanged" /><br /><br /> 
     <asp:Label ID="lblSelectedTime" runat="server" Text="Label" /> 
    </div> 
    </form> 
</body> 
</html> 

Код:

public partial class _Default : Page 
{ 
    string _sLocation = string.Empty; 
    string _sCurrentLoc = string.Empty; 
    TimeSpan _tsSelectedTime; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     AddTimeZones(); 
     cboSelectedLocation.Focus(); 
     lblCurrent.Text = "Currently in " + _sCurrentLoc + Environment.NewLine + DateTime.Now; 
     lblSelectedTime.Text = _sLocation + ":" + Environment.NewLine + DateTime.UtcNow.Add(_tsSelectedTime); 
    } 

    //adds all timezone displaynames to combobox 
    //defaults combo location to seoul, South Korea 
    //defaults current location to current location 
    private void AddTimeZones() 
    { 
     foreach(TimeZoneInfo tz in System.TimeZoneInfo.GetSystemTimeZones()) 
     { 
     string s = tz.DisplayName; 
     cboSelectedLocation.Items.Add(s); 
     if (tz.StandardName == "Korea Standard Time") cboSelectedLocation.Text = s; 
     if (tz.StandardName == System.TimeZone.CurrentTimeZone.StandardName) _sCurrentLoc = tz.StandardName; 
     } 
    } 

    //changes timezone name and time depending on what is selected in the cbobox. 
    protected void cboSelectedLocation_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (TimeZoneInfo tz in System.TimeZoneInfo.GetSystemTimeZones()) 
     { 
     if (cboSelectedLocation.Text == tz.DisplayName) 
     { 
      _sLocation = tz.StandardName; 
      _tsSelectedTime = tz.GetUtcOffset(DateTime.UtcNow); 
     } 
     } 
    } 
} 

Любые советы в том, что смотреть на для новичка осины кодером?

EDIT: добавлено больше кода за


Грэм Кларк был прав, нуждаясь в !Page.IsPostBack, но сейчас что-то с глобальными переменными, которые я поставил. Этот код был перетаскивается и удаляется из проекта C#, поэтому я предполагаю, что есть некоторые проблемы с глобальными переменными и asp.net. Настало время сделать больше исследований по этому вопросу, чтобы понять, как глобальные переменные отличаются автономным, а не веб-программой.

+2

Вы уверены, что не стреляете? Установили ли вы контрольную точку за пределами foreach? Это может быть несвязанная проблема, которая заставляет вас думать, что она не стреляет. – ctorx

+2

Как вы привязываете данные к выпадающему списку? Ваша разметка показывает пустое раскрывающееся меню. Вы привязываете значения к нему в коде? –

+0

@matthew: Да, он не срабатывает вне цикла foreach. @KP: Я устанавливаю информацию о часовом поясе в коде. – Jim

ответ

9

Вы привязываете свой раскрывающийся список к каждой поездке обратно на сервер или просто на обратной стороне? Если вы делаете это каждый раз, возможно, сервер не считает, что что-то было выбрано, поэтому событие не срабатывает.

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

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // bind drop-down list here 
    } 
}