IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Comment récupérer la valeur d'un élément d'une liste déroulante modifié par du javascript?


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut Comment récupérer la valeur d'un élément d'une liste déroulante modifié par du javascript?
    Bonjour a tous,

    J'ai un label "label1", au chargement de ma page je lui ai change sa propriété Text dans une fonction javascript (document.getElementById("label1").innerHTML = "test"; et ca s'affiche bien, donc jusqu'à la tout va bien, sauf quand je veux récupérer sa valeur en codebehind (label1.text) le champ est vide !!!

    est ce que qql aurait une idée ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Suite à quoi tu executes ce qu'il y'a dans le code behind? Un click sur un bouton?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    au chargement de la page, et j ai aussi essayer de le récupérer suite a un clique sur un bouton mais rien a faire !!! je suis allé regardé dans le code source du navigateur et assez bizarrement je ne trouve rien dans la propriété value du champs !!!!!!! alors qu'elle est bien affiché sur la page !!!

    ps : merci pour ta réponse rapide

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Il faudrait le code asp et le code-behind, ca serait plus simple à diagnostiquer

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut



    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
     
     
    <script type="text/javascript" language="javascript">
        function getLocationHash() {
           document.getElementById("hf").innerHTML = window.location.hash;
        }
    </script>
     
    <body>
        <form id="form1" runat="server" >
        <div  >
            <asp:HiddenField ID="hf" runat="server" />
        </div>
        </form>
    </body>
    et le code behind

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            protected void Page_Load(object sender, EventArgs e)
            {
                Page.RegisterStartupScript("myScript", "<script type=text/javascript language=javascript>getLocationHash();</script>");
     
               string hash = hf.value;
            }

  6. #6
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    si tu t'attends à avoir la valeur de window.location.hash de dispo dans ton page_load, il va falloir trouver autre chose.

    Ton page_load est executé coté serveur, puis envoye ton code html au navigatuer coté client, et c'est seulement à ce moment que le javascript est exécuté.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    ok mais ce qui est bizare c est que si je remplace le hiddenfield par un label la valeur de window.location.hash s affiche !!! mais impossible de la récupérer !!!

  8. #8
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    c'est normal, quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string hash = hf.value;
    hf ne contient encore rien.

    Le cycle de vie de ta page est le suivant :
    - page_load
    -> injection de l'appel au script getLocationHash
    - rendu côté client
    -> traitement du javascript, et affectation du hash à hf

    Pour récupérer le hash placé dans hf cotè serveur, il va te falloir retourner coté serveur, et récupérer la valeur située dasn hf

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    OK, merci pour ta réponse
    donc je suis obligé de charger la page deux fois !
    tu connais pas un autre moyen de récupérer le hash d une URL ?
    ou sinon sait tu comment faire pour affecter une valeur a une variable c# en javascript ? j ai trouvé comment récupérer mais pas comment affecter !

    merci d avance

  10. #10
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    tu connais pas un autre moyen de récupérer le hash d une URL ?
    Le hash n'est pas passé coté serveur, donc, coté serveur, c'est mort

    sait tu comment faire pour affecter une valeur a une variable c# en javascript
    Comme je te disais avant, il faut différentier ce que tu as coté serveur et coté client. Au final, tu auras toujours à envoyer des infos au serveur, soit en postant la page, soit en appelant une webmethod

  11. #11
    CUCARACHA
    Invité(e)
    Par défaut
    salut,

    Le plus propre est de créer un script client côté serveur dans lequel tu déclares les clientId des contrôles que tu dois utiliser avec tes scripts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            internal void AddScriptInlineInHeader(string scriptKey, string scriptSource)
            {
                ClientScriptManager cs = Page.ClientScript;
                Type t = this.GetType();
                if (!cs.IsClientScriptBlockRegistered(t, scriptKey))
                {
                    cs.RegisterClientScriptBlock(t, scriptKey, scriptSource);
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            string script = string.Format(@"
            var hiddenId = '{0}';"
            , this.hidTransfert.ClientId);
                if (!Page.ClientScript.IsClientScriptBlockRegistered("clientControlIds"))
                {
                    ScriptManager.RegisterClientScriptBlock(
                        this,
                        typeof(Page),
                        "clientControlIds",
                        script,
                        true);
                }
    A 1 ou 2 erreurs de syntaxe près, ça devrait tourner...

    ++

    Laurent Jordi

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    OK, merci les gars à vous deux,

    Pour Philippe, j ai déjà essayé de récupérer la valeur du champs hidden en cliquant sur un bouton serveur et ca me renvoi une valeur vide !!!

    et pour Laurent je vais essayer et je te tiendrai au courant...

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    salut,

    Le plus propre est de créer un script client côté serveur dans lequel tu déclares les clientId des contrôles que tu dois utiliser avec tes scripts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            internal void AddScriptInlineInHeader(string scriptKey, string scriptSource)
            {
                ClientScriptManager cs = Page.ClientScript;
                Type t = this.GetType();
                if (!cs.IsClientScriptBlockRegistered(t, scriptKey))
                {
                    cs.RegisterClientScriptBlock(t, scriptKey, scriptSource);
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            string script = string.Format(@"
            var hiddenId = '{0}';"
            , this.hidTransfert.ClientId);
                if (!Page.ClientScript.IsClientScriptBlockRegistered("clientControlIds"))
                {
                    ScriptManager.RegisterClientScriptBlock(
                        this,
                        typeof(Page),
                        "clientControlIds",
                        script,
                        true);
                }
    A 1 ou 2 erreurs de syntaxe près, ça devrait tourner...

    ++

    Laurent Jordi
    Laurent stp est ce que tu peux faire deux ou trois commentaires pour que je puisse bien comprendre le fonctionnement? merci d avance

  14. #14
    CUCARACHA
    Invité(e)
    Par défaut
    En fait il faut que tu modifie le script client côté serveur en indiquant les véritables Id qui seront générés par ASP.net et qui viendront modifier ceux que tu auras défini en mode design.

    Chaque contrôle qui a un runat=serveur a une propriété ClientId qui est le Id unique côté client.

    En java script, les variables globales sont celles qui sont déclarée et/ou définies à l'extérieur des fonctions.

    Donc, en créant une balise de script côté serveur et en insérant les clients Id dans les variables qui vont bien, tu pourras accéder à tes contrôles avec des scripts clients.

    La technique que je t'ai présentée est la plus "propre pour le faire".

    Attention, c'est plus compliqué pour les contrôles types reapeater.

    ++

    Laurent

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    ok je te remercie, j ai bien saisi mais c'est pas réellement ce que je veux!

    ce que je voudrais c'est de pourvoir affecter une valeur à une variable c# (déclarée en codebehind) dans un bloc de script !

    tu vois ?

  16. #16
    CUCARACHA
    Invité(e)
    Par défaut
    Oui je vois et c'est exactement ce que je t'ai expliqué...

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    ok, bon je vais refaire des tests et je te tiendrai au courant...
    et merci encore

  18. #18
    CUCARACHA
    Invité(e)
    Par défaut
    S'il y a bien une chose que tu ne regretteras pas c'est les efforts que tu auras fait pour progresser.

    Je ne voudrais pas t'enlever le plaisir de trouver.

    Essayes encore...

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2003
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    je suis tout a fait d'accord avec toi et d'ailleurs ca m'arrive souvent...
    cependant, là j'arrive vraiment pas !!!
    regarde ce que je fais mais ca marche pas !!!

    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
    32
    33
     
    <head runat="server">
        <title></title>
     
        <script type="text/javascript" language="javascript">
            function getLocationHash() {
                hiddenId = window.location.hash;
            }
        </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:HiddenField ID="my_hf" runat="server" />
        </div>
        </form>
    </body>
     
                 string script = string.Format(@"var hiddenId = '{0}';" , this.my_hf.ClientID);
                if (!Page.ClientScript.IsClientScriptBlockRegistered("clientControlIds"))
                {
                    ScriptManager.RegisterClientScriptBlock(
                        this,
                        typeof(Page),
                        "clientControlIds",
                        script,
                        true);
                }
     
                Page.RegisterStartupScript("myScript", "<script type=text/javascript language=javascript>getLocationHash();</script>");
     
                string hash = my_hf.Value;

  20. #20
    CUCARACHA
    Invité(e)
    Par défaut
    Ca ne ressemble pas du tout à ce que je t'ai envoyé...

    C#
    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
     
    string script = string.format(@"
    <script ...>
    var hidId = '{0}';
    var lstId = '{0}';
    </script>",monhid.ClientID);
     
                if (!Page.ClientScript.IsClientScriptBlockRegistered("clientControlIds"))
                {
                    ScriptManager.RegisterClientScriptBlock(
                        this,
                        typeof(Page),
                        "clientControlIds",
                        script,
                        true);
                }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script ...>
    function maliste_onchange(){
        window.document.getElementById(hidId).value = window.document.getElementById(lstId).value;
    }
    </script>
    ++

    Laurent Jordi

Discussions similaires

  1. Réponses: 17
    Dernier message: 08/08/2008, 20h13
  2. FAQ : Comment alterner les couleurs de chaque élément d'une liste déroulante ?
    Par yoghisan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/06/2007, 14h15
  3. Comment changer la valeur d'un input selon une liste déroulante
    Par dreyo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/02/2007, 15h22
  4. Réponses: 6
    Dernier message: 09/01/2007, 11h38
  5. Réponses: 4
    Dernier message: 01/05/2006, 23h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo