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 :

appeler fonction javascript a partir d'un code c#


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut appeler fonction javascript a partir d'un code c#
    Bonjour, j'ai un boutton search dans ma page asp.net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:Button ID="btnsearch" Text="Search" runat="server" CssClass = "button" 
                         onclick="btnsearch_Click"/>
    mon code behind c# est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void btnsearch_Click(object sender, EventArgs e)
        {
            this.ClientScript.RegisterStartupScript(this.GetType(), "findAdress", "findAddress();", true);
        } //findAdress c'est une chaine que j'ai mise pour identification
    Mon code javascript qui marche tres bien :

    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
    function findAddress() {
        var address = document.getElementById("ddlAdr").value;
     
        //appeler methode c# qui retourne l'element station selectionné
     
        // script uses our 'geocoder' in order to find location by address name
        geocoder.geocode({ 'address': address }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                // we will center map
                var addrLocation = results[0].geometry.location;
                map.setCenter(addrLocation);
     
                // store current coordinates into hidden variables
                document.getElementById('lat').value = results[0].geometry.location.$a;
                document.getElementById('lng').value = results[0].geometry.location.ab;
     
                // and then - add new custom marker
                var addrMarker = new google.maps.Marker({
     
                    position: addrLocation,
                    map: map,
                    title: results[0].formatted_address
                });
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        });
    si je met un div et je met directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="button2" class="button" onclick="findAddress(); return false;">Chercher</div>
    tout marche bien

    Mais malheureusement quand je clique sur mon boutton rien ne se passe
    veuillez m'aider sachant que ma fonction javascript est dans un fichier a part :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <head runat="server">
                    <script type ="text/javascript" src="Scripts/script.js"></script>
     
        </head>

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    La méthode RegisterStartupScript est obsolète, en principe tu dois avoir un avertissement du compilateur. Il faut passer par ClientScriptManager.RegisterClientScriptBlock.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Par défaut
    De plus, il faut bien connaître la différence entre la manipulation d'un this.ClientScript et d'un ClientScriptManager classe évoquée par DotNetMatt.
    De mémoire, le ClientScriptManager est à utiliser dans le cadre de postbacks asynchrones (UpdatePanel), car le ClientScript gère mal l'appel au JS dans ce cadre là.
    Si ton bouton est englobé par un UpdatePanel, cela pourrait expliquer ton souci

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    Merci pour vos reponses mais je n'ai pas compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    De mémoire, le ClientScriptManager est à utiliser dans le cadre de postbacks asynchrones (UpdatePanel), car le ClientScript gère mal l'appel au JS dans ce cadre là. 
    Si ton bouton est englobé par un UpdatePanel, cela pourrait expliquer ton souci

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Par défaut
    En ASP.NET, tu peux utiliser un composant "UpdatePanel" pour te permettre de faire de l'AJAX (et donc du Postback asynchrone).
    Quand tu utilises le composant UpdatePanel, les appels à this.ClientScript.RegisterStartupScript ne peuvent plus déclencher d'évènements Javascript, il faut passer par le ClientScriptManager.

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    Le ScriptManager.RegisterClientScriptBlock marche bien mais uniquement quand je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "findAdress", "findAddress();", true);
    avec :
    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
    function findAddress() {
     
        var address = document.getElementById('ddlAdr').value;
     
        // script uses our 'geocoder' in order to find location by address name
        geocoder.geocode({ 'address': address }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                // we will center map
                var addrLocation = results[0].geometry.location;
                map.setCenter(addrLocation);
     
                // store current coordinates into hidden variables
                document.getElementById('lat').value = results[0].geometry.location.$a;
                document.getElementById('lng').value = results[0].geometry.location.ab;
     
                // and then - add new custom marker
                var addrMarker = new google.maps.Marker({
     
                    position: addrLocation,
                    map: map,
                    title: results[0].formatted_address
                });
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        });
    Mais ce que je veux faire c'est enlever la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var address = document.getElementById('ddlAdr').value;
    et passer la valeur directement dans la fonction, comme ca :

    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
    function findAddress(address) {
     
        //var address = document.getElementById('ddlAdr').value;
     
        // script uses our 'geocoder' in order to find location by address name
        geocoder.geocode({ 'address': address }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                // we will center map
                var addrLocation = results[0].geometry.location;
                map.setCenter(addrLocation);
     
                // store current coordinates into hidden variables
                document.getElementById('lat').value = results[0].geometry.location.$a;
                document.getElementById('lng').value = results[0].geometry.location.ab;
     
                // and then - add new custom marker
                var addrMarker = new google.maps.Marker({
     
                    position: addrLocation,
                    map: map,
                    title: results[0].formatted_address
                });
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        });
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        protected void btnsearch_Click(object sender, EventArgs e)
        {
            String adresse = "";
            while (oDBDataReader.Read() == true)
            {
                adresse = ...;// je retourne bien une valeur
            }
            connection.Close();
     
            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "findAdress", "findAddress("+adresse+");", true);
        }
    Comment dois je faire

  7. #7
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    La méthode RegisterStartupScript est obsolète, en principe tu dois avoir un avertissement du compilateur. Il faut passer par ClientScriptManager.RegisterClientScriptBlock.
    Obsolète? Je n'ai rien vu de tel sur la MSDN: http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx


    Tu pourrais utiliser seulement du jQuery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $(document).ready(function(){}
        var selectedAddress = "";
        $(".address").change(function(){ 
            // modifier la valeur de selectedAddress
        });
        $(".button").click(function(){ 
            // Ta fonction de recherche utilisant selectedAddress
        });
    );
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Obsolète? Je n'ai rien vu de tel sur la MSDN: http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx
    Je parlais de la méthode Page.RegisterStartupScript : http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    je me rend compte que L'appel de la fonction javascript via c# se fait correctement, parce qu'il m'affiche le message de la fonction javascript "Geocode was not successful for the following reason:zero result", aussi la base de donnée me retourne bien une valeur adresse que je passe a l'appel de la fonction a l'interieur du register...block mais toujours je recois pas de resultat alors si j'affecte la meme valeur d'adresse a l'interieur de la fonction js tout marche bien

    je n'arrive pas a comprendre c'est quoi le probleme ???

  10. #10
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Que contient "adresse" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "findAddress('" + adresse + "');"
    "Winter is coming" (ma nouvelle page d'accueil)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/01/2012, 17h26
  2. Réponses: 0
    Dernier message: 27/09/2010, 15h24
  3. appeler fonction javascript dans code ASP
    Par skunkies dans le forum ASP
    Réponses: 10
    Dernier message: 18/12/2009, 16h12
  4. cgi/javascript : appeler fonction javascript dans code cgi, need help!
    Par Mr.ux dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/12/2007, 07h33
  5. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23

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