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

JavaScript Discussion :

[OpenLayers - ASP.NET / C#] ordre d'ex�cution de scripts


Sujet :

JavaScript

  1. #1
    Membre �m�rite 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
    Par d�faut [OpenLayers - ASP.NET / C#] ordre d'ex�cution de scripts
    Bonjour,

    J'utilise OpenLayers pour produire des cartes et y ajouter des couches (layers). Je d�veloppe en ASP.NET et c# � l'aide de MS Web Developper 2008.

    Dans le head de ma page aspx, j'ai int�gr� un script dans lequel j'ai mis la fonction d'initialisation (init()), et quelques fonctions pour ajouter des "markers" (ce sont des couches sur lesquelles j'ajoute des icones...).


    Prenons un exemple :

    Sur la page aspx, j'ai trois fonctions javascript : init() (celle de OpenLayers) qui est charg�e lors du chargement du body. Les deux autres fonctions sont appel�es � partir du code behind.
    Ce que je voudrais faire, c'est ex�cuter init() avant ces deux fonctions. Le probl�me est qu'elles s'ex�cutent apr�s...
    Sauriez-vous comment faire ?

    Page ASPX :
    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
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Page sans titre</title>
        <script type="text/javascript">
            var variable1, variable2;
     
     
            function init()
            {
                var string = "voila un autre test du body";
                alert (string);
            }
     
            function test()
            {
                var i = "voila le test";
                alert(i);
            }
     
            function ecrire(vari1, vari2)
            {
                variable1 = vari1;
                variable2 = vari2;            
                alert(variable1 + variable2);
            }
     
        </script>
    </head>
    <body onload="init()">
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <script type="text/javascript">test();</script>
        </div>
        </form>
    </body>
    </html>
    Page CS :
    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
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
     
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string a = "première variable behind";
            string b = "deuxième variable behind";
            string script = "<script type=\"text/javascript\">ecrire('" + a + "'" + "," + "'" + b + "');</script>";
            Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "scriptTest", script);
     
        }
    }
    Je pense que c'est le "RegisterClientScriptBlock" qu'il faut changer. J'ai essay� toutes les m�thodes du script manager (Page.ClientScript) mais init() est toujours ex�cut� en dernier...

    Merci beaucoup.
    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
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    Ce que je voudrais faire, c'est ex�cuter init() avant ces deux fonctions. Le probl�me est qu'elles s'ex�cutent apr�s...
    Sauriez-vous comment faire ?
    normal , test() fait partit de la page , ainsi que ton autre scritp , onload , s'ex�cute une fois toute la page charg�e

  3. #3
    Membre �m�rite 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
    Par d�faut
    Merci pour ta r�ponse...

    L� est le probl�me... avec OpenLayers, si je mets pas la fonction init() dans le body, elle n'est pas ex�cut�e.
    mon probl�me est que je voudrais charger la carte (ex�cution de init()), et en fonction de plusieurs �v�nements, la modifier. La modification est effectu�e � l'aide de scripts javascript que j'�cris dans le code behind de ma page (fichier.aspx.cs). Je peux pas faire appel � init() a chaque fois que je recherge la page (Dans ce cas, le body est recharg�, et je perds mes �v�nements)

    Auriez-vous une solution, svp ?

    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 !

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par d�faut
    lance les autres fonction � l'int�rieur de init!

  5. #5
    Membre �m�rite 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
    Par d�faut
    je peux pas !
    je dois afficher en premier la carte, et en fonction des actions de l'utilisateur, ou d'�v�nements ext�rieurs, j'y ajoute des ic�nes, images etc. (layers).

    mais pour tester, j'ai mis les scripts d'ajout d'icones... au chargement de la page. Mais ces scripts sont appel�s avant init(). C'est clair qu'avec ta solution, ca marche... mais ce n'est pas ce que je veux.

    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 !

  6. #6
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    humm en gros , tu dois avoir ton ini() avant tout le reste , puis , tes m�thodes ??

    dans ce cas la sur ton onload = prepare()

    et dans prepare(){
    init();
    les autre() ..
    }

    non ??

  7. #7
    Membre �m�rite 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
    Par d�faut
    non...

    �a fait rien �a... je peux appeler une fonction prepare1() qui appelle la fonction prepare2() et qui appelle init(), init() sera toujours appel� en dernier parce qu'il est dans l'�v�nement onload du body.

    et les autres fonctions je les cr�e dynamiquement � partir de mon code behind. Je peux pas les mettre dans la fonction prepare().

    De plus, les autres fonctions doivent �tre ex�cut�es en r�ponse � des �v�nements. Quand je les ex�cute, ma carte disparait parque le init() n'est pas rappel� et la page se recharge. alors ce que j'ai fais, c'est rajouter ces fonctions (add_Events()) au chargement de la page (en behind : PageLoad()).Du coup, elles sont ex�cut�es avant le init()...


    Que des probl�mes... Visiblement Javascript et ASP.NET / c# ne sont pas trop compatibles.
    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 !

  8. #8
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    peux tu nous faire une liste exacte du d�roulement actuel , et le d�roulement que tu souhaiterais car la je m'y perd un peu ^^

  9. #9
    Membre �m�rite 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
    Par d�faut
    Ok.

    Voila mon code :
    Dans le fichier javascript, j'ai une fonction init qui initialise la carte et une fonction add_event qui ajoute un �v�nement. Le layer qui contient les �v�nements, je l'ajoute dynamiquement dans le code behind.
    Script map.js :
    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
     
    var map;
    var events_markers;
    var lon = 1.4454175;
    var lat = 43.6019175;
    var zoom = 11;
    var initLonLat;
    var layerTilesAtHome;
    OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
     
    function lonLatToMercator(ll) {
        var lon = ll.lon * 20037508.34 / 180;
        var lat = Math.log (Math.tan ((90 + ll.lat) * Math.PI / 360)) / (Math.PI / 180);
        lat = lat * 20037508.34 / 180;
        return new OpenLayers.LonLat(lon, lat);
    }
     
    function init() 
    {
    //marker.events.register('mousedown', marker, function(evt) { alert(this.icon.url); OpenLayers.Event.stop(evt); });
        initLonLat = lonLatToMercator(new OpenLayers.LonLat(lon, lat));
     
        map = new OpenLayers.Map ("map", {
            controls:[
                new OpenLayers.Control.Navigation(),
                new OpenLayers.Control.PanZoomBar(),
                new OpenLayers.Control.Attribution()],
            maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                  maxResolution:156543.0399, units:'meters', projection: "EPSG:900913"} );
        layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
        map.addLayer(layerTilesAtHome);
        map.setCenter (initLonLat, zoom);
          map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
          map.addControl(new OpenLayers.Control.LayerSwitcher());
        fcds = new OpenLayers.Layer.GeoRSS( 
        'fcds', 'http://www.adresse.fr/geoserver/wms/reflect?layers=fcds&format=rss', 
        {visibility: false});  
     
        map.addLayer(fcds); 
     
    }
    function add_Event(evId, evLongitude, evLatitude) 
    {            
        //récupération du lonlat de l'événement
        var lonLatMarker = lonLatToMercator(new OpenLayers.LonLat(evLongitude, evLatitude));             
        var icon_event = new OpenLayers.Icon('./images/icones/AK31.gif',new OpenLayers.Size(20,30));
        var event_marker = new OpenLayers.Marker(lonLatMarker,icon_event);
        events_markers.addMarker(event_marker);
     
        //events_markers.drawMarker(event_marker);
     
     
        //refresh(events_markers);            
    }
    Fichier Accueil.aspx :

    <HEAD> :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    <script type="text/javascript" src="OpenLayers-2.5/OpenLayers.js"></script>
     
        <script type="text/javascript" src="OpenLayers-2.5/lib/OpenLayers/Layer/OpenStreetMap.js"></script>
     
        <script src="jsScripts/map.js" type="text/javascript"></script>
    <BODY> :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    <body onload="init()">
    blablabla
    <div id="map"></div>
    blablablabla
    </body>
    Fichier Acceuil.aspx.cs (code behind) :

    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
    protected void Page_Load(object sender, EventArgs e)
        {
            lblTime.Visible = true;
            lblTime.Text = DateTime.Now.ToLongTimeString();
            if (!Page.IsPostBack)
            {
                add_Events();
            }
            else
            {
                add_Events();
            }
        }
     
    protected void add_Events()
        {
            //consommation du web service retournant la liste des événements
            webService.webServiceClass proxy = new webService.webServiceClass();
    //récupération d'un tableau de structure (événements)
            webService.tableauEvents[] listEvents = proxy.getEvents();
            int nbEvents = listEvents.Count();
     
            string prepareMarkersLayer = "<script type=\"text/javascript\">events_markers = new OpenLayers.Layer.Markers(\"Events Markers\",{srs: 'EPSG:900913',transparent:true,format:'image/gif'},{singleTile: true} );</script>";
            Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "prepareMarkersLayer", prepareMarkersLayer);
            Response.Write("<script type=\"text/javascript\">alert('events_markers.prepared! (behind)')</script>");
     
            for (int i = 0; i < nbEvents; i++)
            {
                string script = "<script type=\"text/javascript\">add_Event('" +
                    listEvents[i].EventId.ToString() + "'" + "," + "'" +
                    listEvents[i].Longitude.ToString() + "'" + "," + "'" +
                    listEvents[i].Latitude.ToString() + "'" + ")</script>";
                Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "add_Event", script);
            }
            string addMarkersLayer = "<script type=\"text/javascript\">map.addLayer(events_markers);</script>";
            Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "addMarkersLayer", addMarkersLayer);
            Response.Write("<script type=\"text/javascript\">alert('events_markers.added! (behind)');</script>");
     
            string setCenter = "<script type=\"text/javascript\">map.setCenter(middle, 10);</script>";
            Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "setCenter", setCenter);
            Response.Write("<script type=\"text/javascript\">alert('map.centered! (behind)');</script>");
     
    }
    Remarque : le code d'initialisation et d'affichage de la carte s'ex�cute normalement. Par contre, l'ajout des �v�nements ne s'effectue pas parce que les scripts sont ex�cut�s avant la fonction init()... et si j'ex�cute toutes les instructions (init de la carte + ajout d'icones events), ca marche sans probleme, mais c'est le dynamisme qui m'int�resse...
    Par ailleurs, la consommation du web service se d�roule comme je veux. J'ai v�rifi� en mode d�bogage.

    Merci beaucoup...
    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 confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    truc con mais pourquoi en met pas tes scripts d'event a l'int�rieur de ta fonction init ?

    sinon , met un timer , et v�rifit que ton objet existe avant de lancer tes event

  11. #11
    Membre �m�rite 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
    Par d�faut
    Je la voyais venir cette question

    Mais je suis en phase de test. Apr�s, les instructions d'ajout des events r�pondrons aux �v�nements onclick etc. de plusieurs contr�les. J'ai d�j� fait �a, mais ca me "reloadait" la page et je perdais la carte. Lors du reload, l'appel � l'�v�nement onload du body n'est pas effectu�. m�me si je fais �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <script type="text/javascript">init();</script>
    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 �m�rite 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
    Par d�faut
    Citation Envoy� par slim Voir le message
    J'ai d�j� fait �a, mais ca me "reloadait" la page et je perdais la carte. Lors du reload, l'appel � l'�v�nement onload du body n'est pas effectu�. m�me si je fais �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <script type="text/javascript">init();</script>
    Petite rectification, quand je mets un bouton qui fait appel � la fonction add_Events() (code behind c#) en supprimant cet appel de PageLoad du code behind en c#, ca reload la page et ca fait appel � init() du body : 1- ex�cution des instructions javascript d'ajout des �v�nements
    2 - <body onload="init()">...
    =>C'est toujours le probl�me d'ordre d'ex�cution...

    Voici les scripts g�n�r�s dans le HTML :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <script type="text/javascript">events_markers.destroy();</script><script type="text/javascript">events_markers = new OpenLayers.Layer.Markers("Events Markers",{srs: 'EPSG:900913',transparent:true,format:'image/gif'},{singleTile: true} );</script><script type="text/javascript">add_Event('TIGRE7_5_65_2940','2,010318','43,57304')</script><script type="text/javascript">map.addLayer(events_markers);setTimeout("map.addLayer(events_markers)",3000);</script><script type="text/javascript">map.setCenter(middle, 10);</script><script type="text/javascript">refreshAll();</script>
    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 !

Discussions similaires

  1. R�ponses: 2
    Dernier message: 08/04/2014, 17h03
  2. Ordre d'ex�cution du script
    Par derouteu dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 11/06/2010, 17h28
  3. Site ASP.NET et Ex�cution de fichier (.bat)
    Par dahu17 dans le forum ASP.NET
    R�ponses: 3
    Dernier message: 24/04/2007, 15h56
  4. [Asp.Net] ex�cuter fonction javascript
    Par ager1912 dans le forum ASP.NET
    R�ponses: 2
    Dernier message: 20/03/2007, 18h22
  5. R�ponses: 2
    Dernier message: 13/12/2006, 13h48

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