Récupérer la valeur séléctionnée dans une DropDownList

Signaler
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009
-
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009
-
Bonsoir,

Dans ma page aspx, j'ai une DropDownList et un TextBox.

en selectionnant un élément dans la liste, je veux le récupérer dans le textbox.

j'ai déja testé en mettant autopostback= true et ça marche mais le problème c'est que

toute la page est rechargée avec autopostback=true.

Comment faire la meme chose en utilisant un code javascript.

quelqu'un peut me donner un exemple.

Bonjour,

dans le head de ma page aspx j'ai créé une fonction javascript
:

j'ai ecrit une fonction js :

function changer() {

document.form1. Montextbox .value =document.form1.Maliste.options
[document.form1.Maliste.selectedIndex].text;
}

et dans " Maliste_SelectedIndexChanged
" je fais appel à la fonction javascript créée

Code :
 
 Response.Write("<script>changer();</script>")

Je mets autopostback à false vue que je ne veux pas recharger toute la page toute en
utilisant juste du javascript.

En plus le texte que j'ai mis en rouge, je
le tape manuellement vue qu'il n'apparaisse pas
dans les propriétés de form.

ça marche pas. le texte de la liste n'est
pas copié dans le textbox.

je suis vraiment bloquée.

Merci pour vos aides.

 

12 réponses

Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Il te faut différencier ce qui se passe côté serveur et côté client : selectedindexchanged se produit côté serveur, donc sur un postback (ou alors tu dois utiliser de l'ajax).
Quand ta page est créée pour être lue dans un navigateur internet, ton contrôle dropdownlist devient simplement un select html, dont la valeur ou le text peuvent être récupérés en js comme on le fait habituellement pour ce contrôle html.
Pour le faire en javascript, tu dois mettre sur ta dropdownlist un événement onchange. Si tu le fais directement dans ton code asp, tu auras un avertissement (mais ça marchera quand même). Tu peux ajouter sinon un événement onchange avec attributes.add.
Tu peux faire en javascript (le code peut être simplifié) :

function coco(k)
    {
    var x=document.getElementById("DropDownList1").options[k].text;
    document.getElementById("TextBox1").value=x;  
    }

Et pour ajouter l'événement js sur ta dropdownlist, soit tu ajoutes : onchange="coco(this.selectedIndex)" (avec un avertissement dans Visual Studio), soit tu ajoutes un attribut sur ta balise dans le code vb :

Protected Sub DropDownList1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        DropDownList1.Attributes.Add("onchange", "coco(this.selectedIndex)")
 End Sub

GGtry
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
Bonjour,

Tu peux utiliser la méthode précédente ou alors si tu disposes d'ajax dans ton application tu peux mettre ton textBox et ta dropdownlist dans un update panel.

Ainsi, le postback sera invisible.
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

Bonjour,
Merci pour votre réponse.

1- ça marche si je met le fonction javascript dans le onchange de la liste.
    ça marche passi je mets :

Protected Sub DropDownList1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        DropDownList1.Attributes.Add("onchange", "coco(this.selectedIndex)")
 End Sub

              ---------------------------------------------------------------------------

2- quand je selectionne un élément de la liste il s'affiche dans le textbox mais je veux aussi exécuter un code vbnet dans lequel je fais une recherche dans la bse de données suivant l'élément séléctionné.
C'est pas possible d'appeler un code vbnet dans une fonction javascript, c'est pourquoi je ne sais pas comment résoudre ce problème.

                             -------------------------------------------------------------------

3- Dans ma page j'ai un bouton ajouter, et des textbox,
    quand j'ajoute un nouvel élément dans la base de données, je veux que ma liste se
    mette à  jour automatiquement par le nouvel élément. voila ce que j'ai fait :

  function ajouterdansliste(){

var newOption = document.createElement('<option value=' & document.getElementById("textbox1").value  &  '>');document.all.maliste.options.add(newOption);

newOption.innerText = document.getElementById("textbox1").value + "("+ document.getElementById("textbox2").value + ")";
}

quand je clique sur le bouton ajouter, un code en vbnet s'exécute pour insérer le nouvel élément dans la base de donner et en meme temps j'ai mis dans le onclick du bouton ajouter la fonction ajouterdansliste(). 
j'ai un message d'erreur me disant que la fonction n'appartient pas à la page page.aspx

Meme si j'appelle la fonction dans response.write  ça marche pas. le nouvel élément n'apparait pas dans la liste.

Merci pour vos aides
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Dans ce cas, tu dois passer par de l'ajax, comme te le conseille titeoe. Tu pourras ainsi tout faire en vb, et ne plus écrire de javascript. Renseigne toi de ce côté.
Mais fais attention : dans ton point n° 3, tu veux renseigner ta base de données (donc côté serveur), mais en ajoutant la nouvelle entrée dans ta liste dans le code client ! Non, il faut que tu fasses tout côté serveur...
L'ajax permettra en tout cas de faire ce que tu veux faire : mais essaie aussi de bien faire la part entre ce qui peut se faire côté client et ce qui doit se faire côté serveur. Pour qu'un code vb s'exécute il faut nécessairement qu'il y ait postback intégral, ou partiel (par exemple avec de l'ajax), de ta page (ce code n'est pas exécuté dans le navigateur, comme l'est le javascript, mais sur le serveur).
Avant de passer par une solution ajax, tu devrais peut-être d'abord commencer par mettre à jour ta liste en te contentant du postback habituel (avec rafraîchissement complet). Puis, une fois que tu auras réglé ce problème, renseigne toi sur l'ajax pour ne rafraîchir ta page que partiellement.

GGtry
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

Est ce que vous pouvez m'aider à rafraichir ma liste en utilsant ajax vue que je ne l'ai jamais utilisé ?

Merci
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

  je ne trouve pas un exemple de rafraichissement d'une dropdownlist en utilisant ajax.

 
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
tout est dans les posts :

je cite ggtry : "Avant de passer par une solution ajax, tu devrais peut-être d'abord commencer par mettre à jour ta liste en te contentant du postback habituel (avec rafraîchissement complet)."

je cite titeoe : "mettre ton textBox et ta dropdownlist dans un update panel"

Il n'y a rien de plus a faire.
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

Merci pour votre réponse.


 


1- Donc je vais ajouter un updatepanel dans lequel je vais mettre une dropdownlist, mes textbox et le bouton ajouter.


     Quand je clique sur le bouton ajouter j'appelle un code vbnet qui va insérer le nouvel élément dans la basede

    données :
    ( 


     Protected
Sub ajouter_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles ajouter.Click


      )
 et l'élément vas etre automatiquement ajouté dans la dropdownlist .

 C'est juste ?

2- comment ajouter les controles d'ajax dans la toolbox parceque je ne trouve pas le updatepanel ?

Merci
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Si tu ne vois pas l'updatepanel, c'est que les composants ajax ne sont pas encore installés. Voici un lien pour le téléchargement :

http://www.asp.net/ajax/

Ici, un tuto qui pourra peut-être t'aider pour l'installation (il y a peut-être mieux comme tuto, mais j'ai pris le premier venu en français) :

http://msdn.microsoft.com/fr-fr/asp.net/bb758858.aspx

Si tu pars d'un projet déjà existant, tu devras modifier ton web.config (voir tuto, vidéo 2, je crois).
D'autre part, il ne suffit pas rigoureusement d'un updatepanel, il faut aussi un scriptmanager, et mettre tes contrôles dans un contenttemplate.

Pour t'aider une fois que tu auras correctement installé ajax, je t'envoie un exemple simple où je mets une ddl, un textbox et un button dans un updatepanel. Sur un buttonclick, je commande un insert (en ayant déjà défini l'insert command dans mon sqldatasource) avec comme paramètre le text de la textbox, qui ajoute ce texte à la table qui sert à remplir le ddl. Ce texte sera directement ajouté à la ddl.

Code vb   

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        If Trim(TextBox1.Text) <> "" Then
            SqlDataSource1.InsertParameters(0).DefaultValue = TextBox1.Text
            SqlDataSource1.Insert()
        End If
    End Sub

Code asp :

    <form id="form1" runat="server">
   

       
       
       
        <ContentTemplate>
        
       
       
       
        </ContentTemplate>
       
       Ta connection String %>"
            SelectCommand="SELECT Nom, idNom FROM Ta_Table ORDER BY Nom" InsertCommand="INSERT INTO Ta_Table (Nom) VALUES (@Nom)">
           
               
           
       
   

    </form>

GGtry
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

Merci pour votre réponse.

quand je selectionne un élément de la liste il s'affiche dans le textbox en utilisant javascript. mais je veux aussi exécuter un code vbnet dans lequel je fais une recherche dans la base de données suivant l'élément séléctionné et afficher le résultat de recherche dans un autre textbox.

comment faire?


 


Merci pour vos aides
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
rebonjour,

Oui, mais as-tu déjà fait l'opération précédente ? Il me semble que, dans ton cas, tu gagnerais à faire les choses pas à pas.
Mais bon, pour répondre quand même à ta question (et pour le redire) :
Si tu dois faire un retour serveur, n'utilise pas de javascript en même temps : c'est inutile puisque ce que tu fais en javascript, tu peux aussi bien le faire en vb dans ce cas (et c'est aussi pour cela que l'on t'a conseillé de passer par de l'ajax, puisque tu veux éviter l'apparence du rafraîchissement).
Pour remplir ton textbox avec le résultat de la recherche en bdd, utilise éventuellement un formview, dans lequel tu mettras ton textbox. Cela te permettra, en liant ton formview à un sqldatasource, par exemple, de remplir directement le textbox par l'asp, en utilisant comme paramètre la sélection de ta dropdownlist.

GGtry
Messages postés
16
Date d'inscription
samedi 21 mars 2009
Statut
Membre
Dernière intervention
4 mai 2009

et si je veux faire la meme chose avec ajax?

selection de la liste-> recherche bd->affichage du résultat dans le textbox