2008-10-07 13 views
1

Pour clarifier à tout ce problème ne résulte absolument pas de la reliaison des contrôles et la valeur ne reste pas la valeur initiale après la liaison.Quand un DropDownList conserve-t-il la valeur de la publication au gestionnaire d'événements SelectedIndexChanged

J'ai un DropDownList sur une page ASPX qui est utilisée dans plusieurs projets.

Au cours du cycle de vie de la page, SelectedValue est modifié avant la gestion de l'événement SelectedIndexChanged.

Dans un projet lorsque le code atteint le gestionnaire d'événements, SelectedValue est de nouveau à ce qui a été posté à partir du client, tandis que dans l'autre le nouveau SelectedValue est présent. ViewState est activé dans les deux cas, le contrôle n'est pas en cours de rebond et suit exactement le même flux de tout ce que je peux rassembler.

Le contrôle n'est pas initialisé à nouveau, je l'ai vérifié soigneusement et ne conserve pas la valeur initiale mais plutôt la valeur définie dans le code. J'ai effectivement besoin de la valeur affichée au point du gestionnaire d'événements comme cela se passe dans le premier projet mais je ne comprends pas pourquoi il reviendrait à la valeur affichée et comment répliquer ce comportement dans le second projet.

Je serai heureux de clarifier davantage si tout cela n'est pas clair.

Répondre

2

Peut-être qu'une initialisation est effectuée deux fois dans l'événement on_load parce que vous ne vérifiez pas que la page est postée en utilisant IsPostBack dans un test?

Il arrive exactement à un de mes collègues dix minutes :-) il y a

+0

le contrôle n'est pas lié à nouveau et la logique n'est pas pertinente pour un postback – YonahW

0

Je vois souvent ce comportement quand j'ai oublié de vérifier IsPostBack quelque part. La page chargera toutes les données d'origine avant d'aller au gestionnaire d'événements SelectedIndexChanged.

2

Beaucoup de personnes croient à tort que DropDownLists doit avoir ViewState activé pour pouvoir conserver la valeur sélectionnée. Je n'ai presque jamais défini EnableViewState sur true sur DropDownLists car ils fonctionnent correctement sous une forme avec les valeurs affichées. (Et la mise à true sur un contrôle DataBinding fera une longue viewstate)

La valeur affichée (élément sélectionné dans le menu déroulant) est chargé de la post-paramètres après onInit dans la page si vous liez les données à la liste déroulante dans OnInit cela fonctionnera bien.

Si vous vous connectez dans OnLoad, la valeur sélectionnée sera remplacée.

Peut-être que vous êtes dans le mauvais événement de liaison de données de sorte que la valeur sélectionnée est remplacée par un appel DataBind-sur la liste déroulante?

+0

J'étais sous l'impression que viewstate n'était pas nécessaire mais il est là pour le moment. Bien que je modifie la valeur SelectedValue, je ne rebalise pas le contrôle et le code est exactement le même dans les deux projets dont l'un ne perd pas la valeur. – YonahW