2010-10-25 7 views
0

J'essaye d'ajouter une fonction de Javascript pour montrer tous les articles choisis d'un ListBox comme chaînes concaténées dans un label sur la page. Cela est nécessaire car AutoPostBack = "true" entraînera le ListBox à revenir au premier élément sélectionné.L'événement ListBox SelectedIndexChanged nécessite-t-il une publication dans ASP.NET?

Donc, ce code fonctionne:

<script type="text/javascript"> 
    function Updatelist() { 
     var sel = document.getElementById('<%=lstbxStuff.ClientID%>'); 
     var lbl = document.getElementById('ctl00_cph_lblSelectedStuff'); 
     var listLength = sel.options.length; 
     var textForListbox = ""; 
     var list2length = 0; 
     for (var i = 0; i < listLength; i++) { 
      if (sel.options[i].selected) { 
       if(list2length == 0) { 
        textForListbox = sel.options[i].text; 
       } else { 
        textForListbox = textForListbox + ", " + sel.options[i].text; 
       } 
       list2length++; 
      } 
     } 
     lbl.innerText=textForListbox; 

     return textForListbox; 
    } 
</script> 

Malheureusement je dois encore le code derrière délégué SelectedIndexChanged. Y at-il un moyen d'utiliser ces deux sans faire un PostBack? Lorsque j'ai défini AutoPostBack = "false", mon délégué ne semble jamais être atteint.

Répondre

0

Si vous souhaitez appeler un serveur côté déliguer, vous devez effectuer un PostBack.

Quel est le code sur le serveur qui doit être exécuté? Vous devriez être en mesure de faire tout le travail en JavaScript, puis avoir un déclencheur différent (pas selectedIndexChange) pour exécuter le code côté serveur une fois que tous les éléments de la liste sont sélectionnés.

Avez-vous également vu Ajax UpdatePanel et maintainScrollPositionOnPostBack = "true" pour que la page conserve sa position de défilement après les publications. Cependant, cela n'affectera que la barre de défilement des pages et non la sélection.

+0

J'utilise le UpdatePanel. Je n'ai pas trouvé l'attribut maintainScrollPositionOnPostBack. – Blanthor

+0

Il y a beaucoup de logique de l'interface utilisateur qui est déclenchée sur l'événement OnSeletectedIndexChanged dans le code derrière. Si j'étais un gourou JavaScript, je n'aurais pas peur de tout déplacer vers le client. – Blanthor

+0

Zoinks! J'aurais probablement dû savoir que le serveur était nécessaire pour utiliser les délégués côté serveur: D. – Blanthor

0

Je ne pense pas qu'AutoPostBack est la voie à suivre pour vous si ce n'est pas le comportement que vous voulez. Quand ASP.Net fait un post complet, c'est la même chose que le post HTML "traditionnel", renvoyant tout le contenu du formulaire à son serveur et attendant une réponse (qui se trouve être la même page à cause de comment Asp.Net répond). C'est pourquoi la position dans la liste est perdue - c'est une toute nouvelle liste que vous récupérez.

Avez-vous regardé ASP.Net Ajax (UpdatePanels) comme une option possible? Cela se comportera comme une publication dans le sens où elle enverra des données au serveur et appellera vos méthodes, mais publiera seulement une partie de la page.

+0

Mon vrai problème est que sur multiselect plus bas dans la liste, le ListBox retourne en haut de la liste de défilement. En lisant d'autres articles, j'ai trouvé que c'était apparemment à cause du UpdatePanel. J'essaye maintenant d'adresser ceci par le manuscrit de client et AutoPostBack = "faux". – Blanthor

Questions connexes