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 :

appel Javascript from code behind


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut appel Javascript from code behind
    Bonjour ,

    j'ai un petit probl�me sur le site que je suis en train de faire concernant le javascript :

    Une de mes page fille contenant une carte(OpenStreetMap) g�n�r�e via javascript.
    Sur cette carte je devrais pouvoir afficher des marqueurs selon une liste de latitude longitudes que je r�cup�re via ma base de donn�es.

    J'ai cod� un petite fonction qui m'affiche un marqueur selon les coordonn�es que je lui passe , et pour la tester j'avais plac� un div dans ma MasterPage comme ceci et cela fonctionnait tres bien.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    <div style="background-color:green" onclick="addMarker(4.333,50.833)"> click to add a marker to the map</div>

    Le probleme c'est que j'aimerais que les diff�rents marqueurs s'affichent lors de l'arriv�e sur la page (donc sans cliquer sur un bouton ou autre ) mais je ne vois pas comment faire et a quelle �tape du chargement de la page appeller la fonction javascript.

    Si vous pouviez m'aider ce serait sympa.
    Merci.

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Bonjour mirtouf,

    Si j'ai bien compris, tu souhaites au chargement de la page afficher les marqueurs d�j� enregistr�s en base ?

    Pourquoi ne pas utiliser l'�v�nement onLoad javascript pour appeler ta m�thode addMarker ?
    Ou bien dans la m�thode Page_Load (code-behind) de ta page : appeler ta base de donn�es pour obtenir les marqueurs puis utiliser RegisterStartupScript ? (http://msdn.microsoft.com/en-us/libr...tupscript.aspx)

    En esp�rant t'avoir aid�.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Oui c'est ce que je pensais faire mais je ne comprends pas comment utiliser ce
    ClientScript.RegisterStartupScript .
    C'est surtout un des parametres que je ne comprends pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ClientScript.RegisterStartupScript(Type type, string key, string script).
    Visual studio me dit que le premier parametre (Type type) doit etre :
    Type of the startup script to register
    Je me doute bien que c'est du javascript mais par quel ligne de commande lui faire comprendre ca ?

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Hello,

    Je viens de donner un exemple sur un autre post : http://www.developpez.net/forums/d88...e-code-behind/

    tu peux donc utiliser this.GetType() qui te renverra...le type Page bien entendu

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Bon j'ai essayer et ca ne marche toujours pas donc je vais essayer d'�tre plus complet dans mes explications :

    Premier chargement de la page :
    **************************
    Sur ma page master j'ai un script qui contient une fonction InitMap qui est lanc� via

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <body class="body" onload="initmap()">
    Dans cette fonction initmap je voudrais utiliser ma fonction addmarker en lui passant toutes les coordonn�es GPS a afficher mais je ne sais pas comment je peut lui passer ces valeurs .
    Est-ce que je dois aller chercher les valeurs GPS (plus d'une centaine ) dans le script lui-m�me via un champ cach� ou je ne sais quoi ou dois-je lui passer en param�tres et lancer cette fonction addmarker via le code behind?

    Une fois que la page est charg�e :
    **************************
    Toujours sur ma page master ,l 'utilisateur peut cliquer sur un treeview ce qui a pour effet de charger une autre liste de coordonn�es GPS .
    Mais lorsque je cr�e une m�thode pour l'�v�nement click du treeview et que j'utilise la ligne de commande suivante la carte est effac�e :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     this.ClientScript.RegisterStartupScript(this.GetType() , "cle_test", "addMarker();", true);

    Je pris un screenshot du site pour que ce soit plus clair :



    NB : le treeview ainsi que la listbox se trouve sur la masterpage , le contentplaceholder ne contient que la map.

  6. #6
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    mirtouf,

    D�j�, tu te compliques la vie � g�rer les fonctions JavaScript qui manipulent ta map dans la MasterPage, alors que ta map ne se trouve pas sur celle-ci mais sur une Page fille.

    Autant mettre cette partie sur la Page fille :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <body class="body" onload="initmap()">
    Evid�ment tu devras peut �tre transformer cela en :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <asp:Content ID="Content1" ContentPlaceHolderID="c1" runat="server">
     
        <script type="text/javascript">
            function InitLoad() {
                .... Ce que tu veux...
            }
     
            window.onload = InitLoad;
         </script>
    Ensuite, pour aller chercher des donn�es GPS, peut �tre qu'il vaudrait mieux appeller un WebService ou une WebMethode disponible dans le codebehind de ta Page directement via Javascript. Tu as un petit exemple ici avec du code � t�l�charger : http://amolwable.com/index.php/2009/...in-aspx-pages/ . Il y a �videment plusieurs mani�res de faire.


    Ensuite, concernant le chargement des coordonn�es suite � un click sur le TreeView, tu peux tout � fait �viter un PostBack et te servir du JavaScript pour appeler ta WebMethod.

    En esp�rant t'avoir aid�.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Merci bcp pour vos conseils ils m'ont bcp aid� .

    Finalement je passe les coordonn�es gps au javascipt via un champ cach� c'est bcp plus simple pour moi.
    Par contre il faut encore que je r�gle le probl�me de la carte qui disparait lorsque je clique sur le treeview.

    Sinon il y'a un truc qui me laisse assez perplexe , sur ma master page j'ai un script qui contient une fonction que je lance via la commande window.onload=mafonction() et sur ma une autre page fille j'ai aussi un script
    contenant une fonction lanc�e de la m�me fa�on.
    Et lorsque dans la page fille je tape window.onload=mafonction sans les parenth�ses la fonction se lance ainsi que celle de la page maitre et si je met les parenth�ses la fonction de la page fille ne se lance pas .
    J'ai v�rifier partout et je ne lance nul par ailleurs ces deux fonctions .

  8. #8
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Bon le probl�me de la carte qui s'efface est r�solu c'est parce qu'elle �tait dans un update panel dont j'ai du d�sactiver les trigger pour la page contenant la map.

    Ce que j'aimerais bien faire maintenant c'est afficher les sites sur la map quand le user clique sur le treeview et virer les sites pr�c�dents de la map mais je n'arrive pas a lancer ma fonction javascript sur l'�vcenement onselectedindexchanged du treeview , de il y a d�j� une m�thode assign�e a cet �v�nement.

    J'ai essayer avec la m�thode :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "mafunction();", true);
    mais cela ne fonctionne pas ( ma fonction javascript ne contient qu'une alert pour faire simple pour commencer )

  9. #9
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Bonjour mirtouf,

    Si c'est bien compris ton probl�me, tu as d�j� une fonction rattach�e � l'�v�nement OnSelectedIndexChanged de ton TreeView et tu souhaites en ajouter une deuxi�me ?

    Pourquoi ne pas faire simplement ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            function function1() {
               .....
            }
     
            function mafunction() {
                ....
            }
     
            function SelectedIndexChanged () {
                function1();
                mafunction();
            }
    Apr�s, tu peux toujours d�clarer dynamiquement tes fonctions : MaFunction et function1 dans le code-behind via Page.ClientScript.RegisterClientScriptBlock

    En esp�rant t'avoir aid�.

  10. #10
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Oui mais ma fonction attach�e au treeview est en fait une methode c# et j'aimerais en rattacher une autre mais en javascript.
    J'arrive a lier cette fonction au click d'un bouton via la commande :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    bouton.attributes.add("onclick",mafonction()); [Je ne sais pas si c'est la bonne syntaxe je l'écris de tete)
    mais pas au treeview.

  11. #11
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Ok je comprends mieux ce que tu veux : capturer � la fois l'�v�nement c�t� serveur et c�t� client.

    Pour le TreeView, il me semble que tu peux faire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    MyTree.Attributes.Add("onselectedindexchange", "myFunction();");
    D�sol� je n'ai pas Visual Studio sous la main ce weekend pour tester le code.

  12. #12
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    En fait je suis oblig� d'utiliser le onClick dans la commande suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    MonTreeview.attributes.add("onClick",mafonctionjavascript)
    l'�v�nement "onselectednodechanged" n'est pas d�tect�.
    Et le probl�me de cela ( Mais qui n'est pas encore trop d�rangeant je peut faire avec ) c'est que d�s que l'on clique dans la zone du treeview ,que ce soit sur un n�ud ou pas, la fonction est appel�e.

  13. #13
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Pff j'y comprends plus rien ,

    j'ai d�plac� mon script dans ma masterpage parce que sinon quand je lie mon treeview a la fonction javascript via
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     TVW_arbre1.Attributes.Add("onClick", "LoadSites();");
    la fonction javascript ne s'ex�cute pas.

    Et maintenant que j'ai fait cela la page ne s'�x�cute pas , je recois le message d'erreur :
    The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
    Qui vient surement de la ligne suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var Latitude = '<%= LB_longitude.Text %>';
    Donc j'ai remplac� cette ligne de code par :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var Latitude = document.getElementById('ctl00_LB_latitude').text;
    Mais maintenant le probl�me c'est que lorsque je clique sur le treeview il devrait charger les coordonn�es GPS dans le label (LB_latitude) gr�ce � la m�thode que j'ai cr�� dans mon code behind sur l'�vent onselectnodechanged du treeview et puis lancer ma fonction javascript mais il fait l'inverse, donc quand je clique il me charge les donn�es GPS du clic pr�c�dent.
    Pourtant le code behind est ex�cut� avant le javascript non ?

  14. #14
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    mirtouf

    Il est un peu difficile de te r�pondre car tu parles de plusieurs probl�mes � la fois. Au passage, lorsque tu identifies un nouveau probl�me, je te conseille de cr�er un post d�di� � celui-ci afin de garantir des r�ponses plus cibl�es.

    Concernant ta derni�re remarque :
    Mais maintenant le probl�me c'est que lorsque je clique sur le treeview il devrait charger les coordonn�es GPS dans le label (LB_latitude) gr�ce � la m�thode que j'ai cr�� dans mon code behind sur l'�vent onselectnodechanged du treeview et puis lancer ma fonction javascript mais il fait l'inverse, donc quand je clique il me charge les donn�es GPS du clic pr�c�dent.
    Pourtant le code behind est ex�cut� avant le javascript non ?
    Non, c'est l'inverse. Exemple simple, j'ai un bouton ASP.Net pour lequel j'attache une m�thode javascript sur l'ev�nement OnClientClick et une m�thode c# sur l'�ven�ment OnClick. La fonction javascript sera d'abord execut�e, et seulement apr�s le postback de la page aura lieu pour d�clencher l'execution de ta fonction c#.

    En esp�rant t'avoir aid�.

  15. #15
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Citation Envoy� par Nicolas Esprit Voir le message

    Concernant ta derni�re remarque :
    Non, c'est l'inverse. Exemple simple, j'ai un bouton ASP.Net pour lequel j'attache une m�thode javascript sur l'ev�nement OnClientClick et une m�thode c# sur l'�ven�ment OnClick. La fonction javascript sera d'abord execut�e, et seulement apr�s le postback de la page aura lieu pour d�clencher l'execution de ta fonction c#.

    En esp�rant t'avoir aid�.
    Comment faire alors pour que les donn�es GPS soient enregistr�es via le code behind et puis trait�es sous javascript ?

  16. #16
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Ce que tu peux simplement faire, c'est associer uniquement une m�thode � ton �v�nement OnClick. Dans celle-ci (dans le code-behind donc), tu d�clares ta fonction JavaScript dynamiquement pour que celle-ci soit ex�cut�e au prochain chargement de la page (via la m�thode ClientScript.RegisterStartupScript).

    En esp�rant t'avoir aid�.

  17. #17
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Cette solution fonctionne mais elle m'oblige a recharger la page ce que je ne veux pas (j'utilise des updtae panel sur les autres pages ce serait dommage de devoir recharger cette page map a chaque click).

    D�sol� si je suis �nervant mais je vois vraiment plus quoi faire.

  18. #18
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    F�vrier 2010
    Messages
    1 467
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant en technologies
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 1 467
    Par d�faut
    Soit je ne comprends pas ce que tu cherches � expliquer. Soit tu as de s�rieuses lacunes en ASP.Net ou bien tu d�butes.

    Ces deux passages :
    Mais maintenant le probl�me c'est que lorsque je clique sur le treeview il devrait charger les coordonn�es GPS dans le label (LB_latitude) gr�ce � la m�thode que j'ai cr�� dans mon code behind sur l'�vent onselectnodechanged du treeview...
    Cette solution fonctionne mais elle m'oblige a recharger la page ce que je ne veux pas (j'utilise des updtae panel sur les autres pages ce serait dommage de devoir recharger cette page map a chaque click).
    Sont contradictoires (ou r�v�lateurs selon ma supposition du dessus).

    UpdatePanel ou pas, il y a bien un PostBack lors d'une nouvelle s�lection dans le TreeView et un chargement de la page c�t� serveur (m�me si seul le contenu du UpdatePanel est envoy� en html et non toute la page). Donc, dans ta m�thode code-behind o� tu charges tes coordonn�es GPS, tu peux tr�s bien cr�er dynamiquement le script avec RegisterStartupScript non ?

    Si je n'ai pas bien compris ton probl�me, dans ce cas il faut �tre plus explicite ou fournir plus de code pour d�tailler tes explications.

  19. #19
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    33
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Par d�faut
    Ok , ca devrait aller j'ai enfin compris comment fonctionnait le scriptmanager , Ca marche piel poil comme je voulais maintenant.

    Par contre sous cette bouse int�grale qu'est internet explorer j'ai un probleme de javascript que je dois encore r�gler .

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Microsoft JScript runtime error: Object doesn't support this property or method
     
    map = new OpenLayers.Map( 'map',{ controls: [new OpenLayers.Control.Navigation(),
                                                 new OpenLayers.Control.PanZoomBar(),
                                                 new OpenLayers.Control.LayerSwitcher({'ascending':false}),
                                                 new OpenLayers.Control.ScaleLine(),
                                                 new OpenLayers.Control.OverviewMap(),
                                                 new OpenLayers.Control.KeyboardDefaults()] } );

    *EDIT : C'est bon le probleme est r�solu , il fallait rajouter : var map=null avant mon fonction initmap();


    En tout cas merci de ton aide et de ta patience ca m'a permit d'�clairer quelques zones sombres dans ma compr�hension de l'asp.net et javascript.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Appel de javascript par code behind
    Par Pynouz dans le forum ASP.NET
    R�ponses: 9
    Dernier message: 19/09/2011, 13h39
  2. R�ponses: 6
    Dernier message: 03/06/2008, 14h43
  3. Appell� une fonction javascript en code behind
    Par 0xYg3n3 dans le forum ASP.NET
    R�ponses: 4
    Dernier message: 17/10/2007, 15h02
  4. Google Map API --> Javascript et code behind C#
    Par bridel dans le forum ASP.NET
    R�ponses: 2
    Dernier message: 22/01/2007, 21h07
  5. [VB.NET]Javascript et code behind
    Par Dadou74 dans le forum ASP.NET
    R�ponses: 1
    Dernier message: 17/11/2006, 16h30

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