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 :

Passage et utilisation d'un tableau de structure de c# à Javascript


Sujet :

ASP.NET

  1. #1
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut Passage et utilisation d'un tableau de structure de c# à Javascript
    Bonjour,

    J'ai une page Accueil dans laquelle je consomme en code behind (c#) un web service qui me retourne un tableau de structure. Ce tableau je voudrais l'utiliser dans ma page Accueil.aspx.

    J'ai essayé ce code là mais aucun ne marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           WSProxy.WSClass proxy = new WSProxy.WSClass();
           WSProxy.Struct[] listStructs = proxy.getListStructs();
    Jusque là, tout se passe bien. Je récupère bien mon tableau de structure "listStructs" (testé en mode débogage et affichage dans des labels).

    Ensuite, j'ai créé un contrôle caché input dans lequel j'enregistre mon tableau que j'essaye de récupérer en javascript.

    C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myHiddenInput.Value = listStructs.ToString();
    ASPX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             <input id="myHiddenInput" type="hidden" NAME="Hidden1">
    JAVASCRIPT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var myTextField = document.getElementById('myHiddenInput');
    alert("You entered: " + myTextField.value);
    ca marche pas...

    J'ai utilisé une autre méthode.
    J'ai déclaré un tableau en javascript dans le head.
    et dans le code behind, je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "cle1", "<script type=\"text/javascript\">jsListStructs = " + ListStructs + "; </script>");
    j'essaie de l'afficher avec un alert mais ca marche pas non plus. (j'ai ajouté ToString() à ListStructs dans la chaine de caractère et ca marche pas non plus...

    Auriez-vous une idée siouplé ?
    Merciiiii.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    1- comment tu fais pour acceder à ton champ hidden sans l'attribute runat="server"?

    2- quand on fait du JS, on doit utiliser la propriété ClientID (à moins que tu ne fasses du 1.1)

    t'as utilisé un debuggueur de javascript pour voir le soucis?
    t'as regardé la source pour voir le code javascript généré?
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Il se déclenche quand ton JS ? sur un click ? sur un onload ? Je dis ça comme ça mais si tu fais appel à un event js, et que tu utilises RegisterStartupScript, tu dois rajouter un attribut sur l'item qui va générer ton js, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myButton.Attributes.Add("onclick",monjs)

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Citation Envoyé par Ishizaki Voir le message
    Il se déclenche quand ton JS ? sur un click ? sur un onload ? Je dis ça comme ça mais si tu fais appel à un event js, et que tu utilises RegisterStartupScript, tu dois rajouter un attribut sur l'item qui va générer ton js, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myButton.Attributes.Add("onclick",monjs)
    pourquoi faire? là son javascript va s'initialiser au démarrage, il ne fait qu'initialiser une variable. le reste importe peu puisque cela sera forcément éxecuter plutard lorsque la variable sera settée
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  5. #5
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Je le sais bien qu'il ne fait qu'initialiser une variable, je pensais simplement qu'il voulait récuperer l'élément sur un event...

  6. #6
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    1- comment tu fais pour acceder à ton champ hidden sans l'attribute runat="server"?
    oui, bien sur, c'etait juste un mauvais copier coller... désolé.

    Citation Envoyé par Louis-Guillaume Morand Voir le message
    2- quand on fait du JS, on doit utiliser la propriété ClientID (à moins que tu ne fasses du 1.1)
    alors j'ai ce code en code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hidden.Value = tabListStructs.ToString();
    tabListStructs étant mon tableau de structures.

    ASPX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input id="hidden" type="hidden" runat="server" />
        <script type="text/javascript"> var jsListStructs = document.getElementById('<%=hidden.ClientID%>').value;</script>
        <script type="text/javascript">alert(jsListStructs); </script>
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    t'as regardé la source pour voir le code javascript généré?
    Source générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="ctl00$ContentPlaceHolder4$hidden" type="hidden" id="ctl00_ContentPlaceHolder4_hidden" value="WSProxy.Struct[]" />
        <script type="text/javascript"> var jsListStructs = document.getElementById('ctl00_ContentPlaceHolder4_hidden').value;</script>
        <script type="text/javascript">alert(jsListStructs); </script>
    messageBox :
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    t'as utilisé un debuggueur de javascript pour voir le soucis?
    Désolé, mais non, je code sur MS Web developper 2008. le déboggeur ne m'affiche pas le contenu des variables...

    je ne vois pas comment avoir le contenu du tableau...
    j'ai essayé avec alert(jsListStructs[0].attribut1); mais il me retourne undefined sur le messagebox.


    MErci !!
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    Désolé, mais non, je code sur MS Web developper 2008. le déboggeur ne m'affiche pas le contenu des variables...
    le debuggueur Javascript, tu peux l'avoir avec IE ou aussi avec Firebug sous firefox. y a rien de mieux, tu peux faire du pas à pas, faire des watch, etc
    teste le
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  8. #8
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Firebug est excellent! je ne connaissais pas... merci!!

    Le contenu de la variable javascript est bien WSProxy.Struct[].
    Il faudrait que je crée dynamiquement des input pour chaque structure du tableau (en code behind) pour les récupérer en javascript ? Mais là, j'aurais le même problème, ca sera toujours un tableau, enfin une structure. Je pourrais faire maStruct.attribut1 ?
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  9. #9
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    J'ai essayé plusieurs choses... mais j'ai pas pu récupérer le tableau en javascript... !

    la création dynamique me pose des problèmes de gestion des ID des contrôles...

    N'y a t-il pas une méthode simple pour ce tableau de structures ?

    merci!!
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  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 : 45
    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
    En fait, tu veux pouvoir convertir ta liste de WSProxy.Struct[] en variable javascript, non ?

    Donc, fais en un tableau javascript


    Genre, si WSProxy.Struct a comme membres m1 et m2
    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
     
     
    myLiteral.Value = GenerateJavascriptArray(listStructs);
     
    protected string GenerateJavascriptArray(WSProxy.Struct[] structs){
        StringBuilder stb = new StringBuilder();
     
        stb.Append("<script type='text/javascript'>\n");
        stb.Append("var jsListStructs = [\n");
     
        foreach (test t in structs){
             stb.Append("{m1: '").Append(t.m1);
             stb.Append("',m2: '").Append(t.m2);
             stb.Append("'}\n,");
       }
       stb.Remove(stb.Length - 2, 2);
       stb.Append("];");
       stb.Append("</script>");
       return stb.ToString();
    }
    Et cote aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:literal id="myLiteral" runat="server" />
    <script type="text/javascript">alert(jsListStructs); </script>

    Bon, c'est pas trop teste, c'est du snippetcompiler, mais j'ai deja fait comme ca sur un projet...


    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  11. #11
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Trop fort !

    J'ai pas utilisé le même code, mais je l'ai arrangé à ma sauce.

    C'est parfait !

    Merci bcp !!!
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  12. #12
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Bonjour,

    je reviens à la charge, parce que j'ai un petit problème avec le tableau.
    j'utilise le code de "parsing" du tableau de structure en tableau d'objets javascript. Je ne mets pas de balise <javascript> dans la génération du tableau. Je ne mets que le contenu de la variable car j'enregistre le résultat de la fonction de parsing dans une variable c# et je l'enregistre dans un contrôle hidden. Ensuite, je déclare une balise javascript, une variable (var JListStructs =) et là, je fais appel au contenu du contrôle hidden.
    Puis, quand je fais une alerte sur la variable que je récupère, il m'affiche bien le tableau (parfaitement construit mais en chaine de caractère : var JListStructs = [etc.]). Mais lors de l'exécution, il me met JListStructs[i] is undefined (c'est dans une boucle).

    Alors ce que j'ai fais, c'est mettre le contenu de la variable string c# (dans laquelle j'ai le tableau javascript) dans un label. J'exécute. et là, je mets ce que m'affiche le label dans le code (var JListStructs = 'contenu du label que je colle ici', le contenu n'est pas collé dynamiquement)

    Puisque l'affectation de la variable se fait statiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var JListStructs = [{var1:'contenuVar1', ....},{{var1:'contenuVar1', ....}];
    Mon tableau se construit correctement et je n'ai pas d'erreur. Alors que la copie dynamique pose problème. Je ne vois absolument pas pourquoi...
    Lors de l'alerte (affectation statique), il ne m'affiche pas le tableau en chaine de caractere mais il m'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [object Object],[object Object],[object Object],[object Object]
    j'ai 4 objets.



    Mon code 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
    protected string GenerateJavascriptArray(WSProxy.Struct[] structs){
        StringBuilder stb = new StringBuilder();
     
        stb.Append("[\n");
     
        foreach (test t in structs){
             stb.Append("{m1: '").Append(t.m1);
             stb.Append("',m2: '").Append(t.m2);
             stb.Append("'}\n,");
       }
       stb.Remove(stb.Length - 2, 2);
       stb.Append("]");
       return stb.ToString();
    }
    instruction dans laquelle j'appele la fonction de parsing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempHidden.Value = GenerateEventsJavascriptArray(JListStructs);
    Le code javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var JListStructs = [document.getElementById('<%=tempHidden.ClientID%>').value];
    alert(JListStructs);
    Lors de l'alerte, il me met JListStructs undefined...

    Merci...

    [EDIT] quand je passe ma variable c# au controle "hidden", ma chaine de caractere qui construit le tableau d'objets javascript est modifiée... je sais pas pourquoi. J'ai donc utilise un Response.Write directement pour remplir ma variable javascript sans passer par le input hidden. Et ca marche parfaitement[/EDIT]
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'un tableau de structures
    Par Amnael dans le forum Débuter
    Réponses: 7
    Dernier message: 04/02/2014, 14h05
  2. Réponses: 0
    Dernier message: 17/02/2013, 20h27
  3. Utilisation d'un tableau dans une structure
    Par Angelique64 dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/06/2009, 11h05
  4. Réponses: 2
    Dernier message: 23/02/2009, 11h23
  5. Réponses: 7
    Dernier message: 16/04/2007, 13h39

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