Bonjour,
je d�veloppe un site ASP .NET avec utilisation d'AJAX (via la biblioth�que de Microsoft) et d'une master page.
J'utilise un UpdatePanel qui englobe plusieurs ContentPlaceHolders.
Dans une page de contenu, un des <asp:Content> contient 2 <asp:ListBox> qui sont remplies dans le Page_Init gr�ce � un Bind sur la base de donn�es.
Jusque l� tout marche bien.
Les deux listes doivent interagir entre elles : celle de gauche liste tous les �l�ments dispos, celle de droite liste les �l�ments s�lectionn�s (elle est donc vide la premi�re fois).
A chaque fois qu'un �l�ment est selectionn� (et valid� via un bouton) dans la liste de gauche, il doit �tre ins�r� dans celle de droite et enlev� de celle de gauche.
La solution la plus simple serait de faire un appel serveur � chaque ajout d'�l�ment : INSERT en base + rafra�chissement du UpdatePanel qui listerait donc les nouveaux contenus des 2 listes. Seulement cette solution g�n�re beaucoup de trafic serveur et pourrait �tre un peu lente c�t� client si une personne veut s�lectionner beaucoup d'�l�ments, j'ai donc voulu essayer une autre solution : g�rer toutes les interactions entre les listes c�t� client (en JavaScript) puis valider une fois pour toutes les modifications et les enregistrer en base (DELETE de tous les anciens �l�ments s�lectionn�s et INSERT de chaque �l�ment contenus dans la liste de droite).
Toutes les modifications c�t� client en Javascript fonctionnent bien mais lorsque je fais mon appel serveur, ma ListBox est d�sesp�r�ment vide, m�me si des �l�ments ont �t� ajout�s en javascript.
Pour info, voici le code des fonctions d'ajout et de retrait d'�l�ments dans une liste :
Je sais que la fonction ListRemove "corrompt" les values des items de la liste mais seul le texte de chaque �l�ment m'int�resse.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 //ajoute l'élément 'item' à la fin de la liste 'list' function ListAdd(list,item) { var option = new Option(item.text,item.value); list.options[list.length] = option; } //supprime l'élément 'item' de la liste 'list' function ListRemove(list,item) { var original_length = list.length; for( i=list.length-1; i>=0; i--) { if(list.options[i].text == item.text) { for(j=i;j<list.length-1;j++) { list.options[j].text=list.options[j+1].text; } //si on a enlevé le dernier élément, il faut sélectionner le précédent //(comportement par défaut : sélectionne l'élément suivant) if( (i == original_length - 1) && (list.length > 1) ) { list.selectedIndex = i - 1; } list.length--; } } }
Quelque chose m'�chappe mais je n'arrive pas � voir quoi. Quelqu'un a t-il une id�e ?
Merci d'avance
Nicolas
Partager