2008-09-16 6 views
8

Je gère l'événement onSelectIndexChanged. Un événement est déclenché lorsque la sélection DropDownList change. le problème est que DropDownList renvoie toujours les anciennes valeurs pour SelectedValue et SelectedIndex. Qu'est-ce que je fais mal?Le gestionnaire d'événements SelectedIndexChanged récupère l'ancien index

Voici la définition DropDownList du fichier ASPX:

<div style="margin: 0px; padding: 0px 1em 0px 0px;"> 
    <span style="margin: 0px; padding: 0px; vertical-align: top;">Route:</span> 
    <asp:DropDownList id="Select1" runat="server" onselectedindexchanged="index_changed" AutoPostBack="true"> 
    </asp:DropDownList> 
    <asp:Literal ID="Literal1" runat="server"></asp:Literal> 
</div> 

Voici le gestionnaire d'événements DropDownList OnSelectedIndexChanged:

protected void index_changed(object sender, EventArgs e) 
{ 
    decimal d = Convert.ToDecimal(Select1.SelectedValue); 
    Literal1.Text = d.ToString(); 
} 

Répondre

12

Avez-vous un code de chargement de la page qui est par hasard re par défaut la valeur à la première valeur?

Lorsque la page se recharge, voyez-vous la nouvelle valeur?

+0

ouais, c'est aussi la première chose à laquelle j'ai pensé. – Danimal

+0

J'ai vérifié et trouvé à ma grande surprise que j'avais du code dans Page_Load qui reprenait la valeur par défaut. Merci Mitchel! – minty

+0

J'ai eu le même problème une fois. – axk

0

Est-il possible que vous ayez des éléments copiés dans votre source de données pour la liste déroulante?

2

ajouter ceci: si page.isnotpostback {

} autour de votre code pour lier le dropdownlist.

1

Cela peut sembler évident, mais de toute façon. Initialisez-vous cette liste déroulante avec une valeur initiale dans un autre gestionnaire d'événements comme OnLoad? Si tel est le cas, vous devez vérifier si cet événement a été déclenché par une publication ou par le premier chargement. Donc, vous devriez avoir quelque chose comme

if(!IsPostback) d.SelectedValue = "Default" 
3

Si vous utilisez AJAX, vous pouvez également faire un rappel, pas une publication complète. Dans ce cas, vous pouvez utiliser ceci dans votre méthode de chargement de page:

 if (!IsCallback && !IsPostBack) 
     { 
      // Do your page setup here 
     } 
+1

Est-ce que c'est vrai? Je suis sûr que 'IsPostBack' retournera' true' dans les deux cas. – TZHX

Questions connexes