3

L'événement OnSelectedIndexChanged ne se déclenche pas pour ma liste déroulante. Tous les forums que j'ai regardés m'ont dit d'ajouter le AutoPostBack="true", mais cela n'a pas changé les résultats.Dropdown OnSelectedIndexChanged non déclenché

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> 

code derrière:

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); 
     } 
     } 
    } 
} 

Des conseils en quoi regarder pour un codeur asp recrue?

EDIT: ajouté plus de code derrière


Graham Clark a eu raison du besoin !Page.IsPostBack, mais il est maintenant quelque chose avec les variables globales que je jeu. Ce code a été glissé et déposé d'un projet C#, donc je suppose qu'il y a quelques problèmes avec les variables globales et asp.net. Il est temps pour moi de faire plus de recherches à ce sujet pour comprendre comment les variables globales diffèrent dans un programme autonome par opposition à un web.

+2

Etes-vous sûr qu'il ne se déclenche pas? Avez-vous défini un point d'arrêt en dehors de la foreach? Il pourrait s'agir d'un problème sans rapport entre vous qui vous amène à croire qu'il ne tire pas. – ctorx

+2

Comment liez-vous les données à la liste déroulante? Votre balisage montre une liste déroulante vide. Est-ce que vous liez des valeurs dans le code derrière? –

+0

@matthew: Oui, il ne se déclenche pas en dehors de la boucle foreach. @KP: Je suis en train de mettre des informations sur le fuseau horaire dans le code. – Jim

Répondre

9

Etes-vous en train de journaliser votre liste déroulante à chaque retour sur le serveur ou juste après une publication? Si vous le faites à chaque fois, il se peut que le serveur ne pense pas que quelque chose a été sélectionné, donc l'événement ne se déclenchera pas.

Dites que vous liez la liste déroulante dans l'événement Page_Load. Vous voulez le faire comme ceci:

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