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 :

Modifier script javascript existant dans page .aspx


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur web - Monteur d'opération réha. logt
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur web - Monteur d'opération réha. logt
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Modifier script javascript existant dans page .aspx
    Bonjour à tous,
    Je recherche depuis …longtemps, la méthode pour modifier depuis le code-behind, la valeur d’une variable contenue dans une balise <script type="text/javascript"> d’une page .aspx. Je souhaite modifier cette variable au chargement de la page.
    J’ai étudié la méthode « RegisterClientScriptBlock » de la class « ClientScriptManager ». Elle permet d’ajouter un nouveau script mais pas de modifier un script existant.
    Si le script avait été plus court j’aurai bien utilisé cette méthode, mais ce n’est pas le cas.
    Auriez-vous une suggestion à me faire ?

  2. #2
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Bonjour,

    Je n'ai pas très bien saisi votre problème.
    Pour ce qui est de modifier au chargement de la page => protected void Page_Load(object sender, EventArgs e) et le code dedans.

    Pour ce qui est du javascript, où est le script en question ? Quand s'exécute-t-il ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur web - Monteur d'opération réha. logt
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur web - Monteur d'opération réha. logt
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci pour ce contact,

    Alors...j'ai dans l'entête de ma page de contenu (.aspx) un script javaScript qui s'exécute lorsque la page est entièrement chargée. C'est dans ce script que je souhaite modifier le contenu d'une variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script type="text/javascript">
     
            $(document).ready(function() {
     
                var maVariable = “contenu fct du user”
     
                //... code qui utilise “maVariable” 
     
                };
        </script>
    Modifier une page de contenu au chargement via
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ne me pose pas de problème jusqu'à présent. (j'ai même dit que j'avais réussi à insérer un nouveau script). Le souci, c'est comment modifier cette variable, contenu dans un script existant ?

    J'ai déjà envisagé la piste suivante : insérer “contenu fct du user” dans un asp:TextBox cachée avec le code-behind. Puis récupérer le contenu de l'asp:TextBox avec JS mais je me suis dit qu'il existait forcément plus simple et plus sécurisé car pour corser l'action “contenu fct du user” contient du script.

    J'espère que ces infos complémentaires vous aiderons

    A+

  4. #4
    Rédacteur

    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 838
    Points : 4 574
    Points
    4 574
    Par défaut
    Bonjour,

    Si j'ai bien compris, ton script s'exécute une fois que la page est chargée ?

    Si oui, dans ce cas, tu peux essayer d'utiliser la méthode ClientScriptManager.RegisterClientStartupScript

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur web - Monteur d'opération réha. logt
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur web - Monteur d'opération réha. logt
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour Jean-Michel,
    Oui en effet, c'est une piste mais dans mon cas la StringBuilder serait...chargée.
    Un "dessin" valant mieux qu'un long et confus discours (et puis, y'a rien à cacher), voilà le code auquel je veux parvenir - C'est le contenu du paramètre "areas" (en violet dans le code) qui doit être modifié lors du chargement de la page :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
        <script type="text/javascript">
    
            $(document).ready(function() {       
    
                monPlan = $('img[id*="monImg"]');
                var listeZones = $('#id_div_listSelectZones');
    
                var optionsImgMapster = {
                    stroke: true,
                    strokeColor: "00FF00",
                    strokeWidth: 3,
    
                    fill: true,
                    fillColor: "FFFFFF", //la transparence (sinon noir)
                    fillOpacity: 0, //opacité nulle (sinon l'opacité n'est pas nulle)
    
                    mapKey: 'themezone', //indique l'attribut utilisé pour définir les particularités des AREA
                    listKey: 'name',
    
                    mapValue: 'themezone', // valeur de l'attribut à transmettre à la fct onGetList
                    onGetList: addCheckBoxes, //fct qui ajoute une liste des "data-zoneType" à cocher
    
                    areas: [
        	                { key: 'Basique', strokeColor: "33FF33", fillColor: "FF0000", fillOpacity: 0.7 },
        	                { key: 'Zone amiantée', strokeColor: "FF0000", fillColor: "FF0000", fillOpacity: 0.7 },
        	                { key: 'Zone non amiantée', strokeColor: "33FF33", fillColor: "33FF33", fillOpacity: 0.7 },
        	                { key: 'compAmiante', strokeColor: "CC9900", fillColor: "008B8B", fillOpacity: 0.7 }
                        ]
                };
    
                
                /*-- active imageMapster --*/
                monPlan.mapster(optionsImgMapster);
    
    
                function addCheckBoxes(items) {
                    var item, selected;
                    listeZones.children().remove();
                    for (var i = 0; i < items.length; i++) {
                        selected = items[i].isSelected();
                        item = '<div><input type="checkbox" name="' + items[i].key + '"';
                        item = item + (selected ? "checked" : "") + '><span class="sel" key="';
                        item = item + items[i].key + '">' + items[i].value + '</span></div>';
                        item = $(item);
                        listeZones.append(item);
                    }
                    listeZones.find('span.sel').unbind('click').bind('click', function(e) {
                        var key = $(this).attr('key');
                        monPlan.mapster('highlight', true, key);
                    });
                    // return the list to mapster so it can bind to it
                    return listeZones.find('input:checkbox').unbind('click').click(function(e) {
                        var selected = $(this).is(':checked');
                        monPlan.mapster('set', selected, $(this).attr('name'));
                        styleCheckbox(selected, $(this));
                    });
                }
    
            });     
    
        </script>
    L'utilisation des balises <%=%> ne permet pas d'insérer ce type de contenu.
    Idéalement il faudrai pouvoir insérer <script> optionsImgMapster.areas =.....</script> entre 2 scripts existants.
    Qu'en penses-tu ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur web - Monteur d'opération réha. logt
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur web - Monteur d'opération réha. logt
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Points : 15
    Points
    15
    Par défaut La solution*:
    La solution est simplissime (lorsqu’on l’a mis au moins 1 fois en œuvre ). Elle utilise la méthode ClientScriptManager.RegisterClientScriptBlock suggérée par Jean-Michel et la position du script inséré n’est aucunement un frein au déroulement du programme comme je le pensai.

    Dans la page .aspx, j'inscris le script à modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script id="existant" type="text/javascript">
    $(document).ready(function() {
      ...
      maVariable ={ // NB : la variable a modifier doit être globale (pas de "var=...")
      param1 : ...,
      param2 : ...,
      monParam :[]   // dans mon cas c'est un table
    };
     
      initMonParam(); // On appelle la fct qui va modifier le paramètre de la variable objet
      ...
    });
    </script>
    Pour modifier "maVariable", je dois insérer ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script id="script_ajouté" type="text/javascript">  // tout ce script est ajouté via le code-behind de la page aspx
    function initMonParam(){
      var monContenu = [ blablabla..............]; 
      maVariable.monParam = monContenu;
    };
    </script>
    pour y parvenir, je glisse dans le "Page_Load" de la page .aspx, le code vb.net suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim l_TextScript As New StringBuilder()
    Dim cs As ClientScriptManager = Page.ClientScript
     
    l_TextScript.Append("<script type=""text/javascript"">" & vbCr)
    l_TextScript.Append("function initMonParam() {" & vbCr)
    l_TextScript.Append("var monContenu =" & contenuXml & ";" & vbCr)
    l_TextScript.Append("maVariable.monParam = monContenu;" & vbCr)
    l_TextScript.Append("};" & vbCr & "</script>")
     
    cs.RegisterClientScriptBlock(GetType(String), "script_ajouté", l_TextScript.ToString(), False)
    2 notions sont importantes :
    • la variable à modifier doit être GLOBALE,
    • comme la variable modifiée est utilisée après le chargement complet de la page (grâce à « $(document).ready… »), la sous-fonction JS qui permet de l’initialiser a déjà été écrite dans la page et peut donc être appelée.


    Lorsque j’ai rédigé le code-behind, il y a un truc que j’ai apprécié et que je vous conseille. Vous avez remarqué que les doubles quotes devaient être doublées dans le «StringBuilder». Et bien ce n’est pas le cas pour le contenu récupéré depuis un fichier xml (variable «contenuXml»). Au final, pas de manip. de la chaine de caractères et un affichage du contenu xml identique au futur script.

    Voilà ! En espérant que ça aide qqu1.

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

Discussions similaires

  1. Variables UserControl dans page aspx
    Par patachouNewG dans le forum C#
    Réponses: 1
    Dernier message: 06/05/2008, 12h42
  2. [Js dans page aspx] Redirection
    Par onouiri dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/08/2007, 10h14
  3. appel de javascript impossible dans page appelée en ajax
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/08/2007, 10h48
  4. Utiliser script bdD existant dans pgadmin
    Par vvaness30 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/03/2007, 11h35
  5. applet java dans page ASPX
    Par volivi dans le forum Applets
    Réponses: 1
    Dernier message: 06/11/2006, 21h12

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