2010-06-29 5 views
1

J'ai remarqué que certaines commandes (par exemple TextBox) conservent leurs modifications entre les publications même si la modification est effectuée par un script côté client alors que d'autres ne le font pas (par exemple, ListBox). Quelqu'un peut-il m'expliquer pourquoi? Est-il possible d'étendre le premier comportement à d'autres contrôles? Merci!Modifications ViewState et côté client

+1

-ce que ces zones de texte qui ne changent pas marquées comme 'ReadOnly' par hasard? –

+0

non, ils ne sont pas :) – astorcas

Répondre

1

Il dépend du moment où la zone de liste est en cours ou ListItem sont en cours de remplissage lié aux données.

Généralement, un tel cas se produirait lorsque le ListBox est créé à l'intérieur d'un autre contrôle parent tel qu'un répéteur et que le répéteur est lié à des données à l'événement Page_Load. Ce qui signifie que la ListBox n'existe réellement que lorsque l'événement Page_Load est terminé.

ViewState est restauré dans ListBox quelque part entre les événements Page_Init et Page_Load du contrôle de page. Si le contenu de la ListBox est créé lors de l'événement Load, cela signifie que ViewState de ListBox ne peut pas restaurer le contenu après PostBack et ne peut pas suivre et sélectionner automatiquement la nouvelle SelectedValue à partir du PostBack. Si le répéteur dans ce cas est lié à des données à l'événement Page_Init, le contenu de la ListBox serait prêt après l'événement Page_Init et ViewState est capable de restaurer correctement et automatiquement sélectionné SelectedValue.

Je lie généralement les données à l'événement Page_Init pour m'assurer que les contrôles peuvent fonctionner correctement avec ViewState. Consultez le cycle de vie de la page du formulaire Web ASP.NET pour plus de détails.

http://msdn.microsoft.com/en-us/library/ms178472.aspx

0

Tous les contrôles conservent leurs modifications entre les publications - Sauf si vous les créez à nouveau par programmation.

Votre ListBox perd probablement les modifications car vous le remplissez sur chaque PostBack.

Essayez de faire

if(!IsPostBack) 
{ 
PopulateMyListBox() 
} 
+0

Désolé, je ne me suis pas fait clair. Le comportement bizarre sort quand les contrôles sont édités via Javascript. Si je modifie une zone de texte côté client, la valeur est conservée après posback. D'un autre côté, si je modifie une zone de liste (par exemple, ajouter un élément), les modifications ne sont pas conservées. Je me demandais juste pourquoi. – astorcas

+0

Voir l'état - Il garde une trace de toutes les options que vous aviez là lorsque vous avez servi la page –

+0

@astorcas: votre commentaire est beaucoup mieux libellé que la question elle-même. Peut aider à éditer votre texte de question. –