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 des fonctions JavaScript [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 45
    Par défaut Modifier des fonctions JavaScript
    Bonjour à tous,

    J'ai éffectué une longue recherche sur le sujet, pour en conclure que je comprends pas comment m'en sortir, ou que mon niveau d'ASP.net est proche de null.

    Le besoin de base

    Générer une fonction javascript et pouvoir la modifier via le code behind à la volée.

    Code C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void Page_Load(object sender, EventArgs e)
    {
         //Code Initialisant du javascript maFonction(){alert("blablabla");}//
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void button_Click(object sender, EventArgs e)
    {
        //Code modifiant du javascript maFonction(){var toto="toto";}//
    }
    L'idée est de changer l'intégralité du code à l'intèrieur de ma fonction javascript.

    La problèmatique

    S'il est relativement facile d'injecter du javascript via le code behind en utilisant ClienScript, il est beaucoup plus complexe de pouvoir modifier cette fonction une fois créé.

    J'ai essayé plein de choses (scriptManager, utilisation de variable, jQuery, ...) et des tonnes de tuto, et du coup, je sais même plus ou j'en suis.

    Si quelqu'un pouvait juste me remettre sur les rails, ou un début de piste correcte.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2009
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 229
    Par défaut
    Modifier le code d'une méthode javascript à partir de code behind : c'est pas possible !!!
    par contre, il y a de objets .Net que nous permet d’émettre de code javascript pour qu'il soit exécuter côté client, pour cela tu peux utiliser Page.ClientScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string javaScript = "<script language=JavaScript>alert('blablabla');</script>";
    ClientScript.RegisterStartupScript(typeof(Page), "TestChargementJS", javaScript);

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Si c'est possible, mais c'est bien moche: tu surcharges et remplace la fonction javascript (ex : http://bytes.com/topic/javascript/an...cript-function)

    Si tu veux mon avis, le problème ne se situe pas à ce niveau là, mais de manière plus générale.

    Que veux-tu faire ?
    Pourquoi as-tu besoin de surcharger une méthode js ?
    etc..

    A priori dans ton cas tu écris du code js dans ton page_load, tu le register à ce moment là. Optionnellement lors d'un clic sur un bouton, et veux remplacer ledit script.

    Une solution: stocke le contenu final jasvascript dans un champ privé que tu écris dans ton page_load ou que tu écrase lors du on_click.Puis, lors du pre_render seulement tu fais ton register script.

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 45
    Par défaut
    Pour expliquer un peu mieux ma problèmatique, l'outils que je développe utilise des équations complexes construites par mes utilisateurs via un fichier XML.

    Pour calculer de façon simple via des paramètres j'utilise le javascript. Ne connaissant pas à l'avance les équations, je construis donc ma fonction lors du chargement (avec ClientScript). Si cela fonctionnait trés bien jusqu'à présent, ça se complique parceque maintenant il faudrait que l'on puisse modifié l'équation sans être obligé de recharger l'ensemble de la page et sans toucher à l'XML de base.

    J'ai essayé d'utiliser une variable ASP à l'intèrieur d'une fonction, mais ma variable ne se rafraichi pas lors de l'action sur le bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script type="javascript">
    function maFunction(){
    <%=maVariable%>
    }
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    protected void Page_Load(object sender, EventArgs e)
    {
         maVariable = "alert('blablabla');";
    }
    protected void button_Click(object sender, EventArgs e)
    {
        maVariable = "var toto='toto';";
    }
    Si je comprends ton idée mermich, ça serait d'utiliser la value d'un hiddenfield? Tu peux développer l'idée stp?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Re,

    Bon, tu va avoir un petit problème:
    Si cela fonctionnait trés bien jusqu'à présent, ça se complique parceque maintenant il faudrait que l'on puisse modifié l'équation sans être obligé de recharger l'ensemble de la page...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void button_Click(object sender, EventArgs e)
    {
        maVariable = "var toto='toto';";
    }
    => tu effectues un traitement serveur, mais sans vouloir recharger la page, et sans connaitre ajax ou update panel je suppose. Du coup ca coince et c'est normal.

    La solution la plus simple (si c'est possible vis à vis de ton besoin) c'est de faire tout le traitement en javascript.

    Envoi-nous un peu plus de code, sur ce que ton bouton doit faire et sur ta fonction js de calcul.

    PS : Mea culpa, la solution du hiddenfield ne changera rien au problème.

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 45
    Par défaut
    Pour des raison de confidentialité, je peux pas vous mettre le javascript.

    L'idée est assez simple, le button doit vérifier des paramètres, la viabilité de l'équation, et lancer le calcul. J'aurais pu utiliser onclientclick et tout faire en javascript, mais du coup je perd le traitement codebehind.

    Je connais l'utilisation des updatepanel (j'en utilise dans plusieurs formulaires), j'ai déjà tenter d'ajouter mon code javascript à l'interieur via la création d'un literalcontrol mais sans succés du moins l'updatepanel ne supprime pas son contenu et garde l'ancien script.

    Sinon j'avais l'idée, d'écrire un fichier JS, et de modifier le contenu du fichier à la volée avec le codebehind, c'est possible ça?

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Citation Envoyé par xanass Voir le message
    Sinon j'avais l'idée, d'écrire un fichier JS, et de modifier le contenu du fichier à la volée avec le codebehind, c'est possible ça?
    Ca doit etre possible mais le javascript restera sans-doute dans le cache navigateur, et surtout c'est une mauvaise solution.

    Maintenant,le coup de l'updatepanel correspondrait parfaitement à ton problème, il suffirai pour cela d'écrire ton js dans le div de ton updatepanel avec
    Et du coup lors d'un rechargement du div de ton update panel,ledit bloc serai rechargé et remplacé.

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 45
    Par défaut
    Effectivement le cache devient vite un problème

    La solution qui semble fonctionner (au moins sous IE9), est d'utiliser un updatepanel. C'est pas du code ultra propre mais au moins ça le mérite d'obtenir un résulat satisfaisant

    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
     
     
    protected void Page_Load(object sender, EventArgs e)
    {
         monPanelPopulate("monScriptJS");
    }
    protected void button_Click(object sender, EventArgs e)
    {
        monPanelPopulate("monNouveauScriptJS");
    }
    private void monPanelPopulate(String maFonctionJS)
    {
        monPanel.Controls.clear();
        monPanel.update();
        monPanel.controls.add(new literalcontrol(maFonctionJS));
        monPanel.update();
    }
    Bien entendu dans le String qui compose le script on inclus les balise <script>

    Pour moi ça reste provisoire, il faut que je revoit l'ensemble du mécanisme pour que ce soit plus simple, plus propre, et moins "bricolage", et j'en convient c'est assez bourrin comme méthode.

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

Discussions similaires

  1. appeler des fonctions javascript avec php
    Par thaundeadboss dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2009, 11h18
  2. modifier une fonction javascript
    Par kaking dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/07/2009, 10h10
  3. Où trouver la définition des fonctions javascript
    Par Macomoul dans le forum Débuter
    Réponses: 4
    Dernier message: 08/01/2009, 11h26
  4. Appel des fonctions javascript
    Par salmoucha dans le forum MVC
    Réponses: 18
    Dernier message: 06/03/2008, 23h47
  5. [AJAX] Ajax et exécution des fonctions javascript
    Par Bobtop dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/06/2006, 15h22

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