none
Récupération de variable du javascript vers le C# RRS feed

  • Question

  •  

    Bonsoir,

     

    J'aimerais savoir s'il existe un moyen de récupérer la valeur d'une variable contenue dans du code javascript, par un code C# ?

     

    Si oui comment?

     

    Le code javascript, est tiré de Virtual Earth SDK:

     

    Code Snippet

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>  
    <head>     
    <title></title>     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1">
    </script>
         
    <script type="text/javascript">        
     var map = null;                 
     function GetMap()        
     {                              
            
     }     

            function DoCenterZoom()     
            {        
      
      map = new VEMap('myMap');           
      map.LoadMap();
                    var lat =  48.83;        
             var lon =   2.28;        
      var zoom = 8;      
      map.SetCenterAndZoom(new VELatLong(lat, lon), zoom);     
     }


     function WalkingItinerate()
     {
      var options = new VERouteOptions();           
      options.RouteMode = VERouteMode.Walking;   
      options.RouteCallback=onGotRoute;       
      map.GetDirections(["Arc de triomphe", "Tour eiffel"], options); 
     }

     function onGotRoute(route)        
     {          
      // Unroll route          
      var legs  = route.RouteLegs;          
      var turns = "Total distance: " + route.Distance.toFixed(1) + " mi\n";          
      var numTurns = 0;          
      var leg      = null;          
      // Get intermediate legs           
      for(var i = 0; i < legs.length; i++)           
      {              
       // Get this leg so we don't have to derefernce multiple times              
       leg = legs[i];  // Leg is a VERouteLeg object                                
       // Unroll each intermediate leg              
       var turn = null;  // The itinerary leg                                
       for(var j = 0; j < leg.Itinerary.Items.length; j ++)             
       {                 
        turn = leg.Itinerary.Items[j];  // turn is a VERouteItineraryItem object                 
        numTurns++;                 
        turns += numTurns + ".\t" + turn.Text + " (" + turn.Distance.toFixed(1) + " mi)\n";              
       }           
      }           
      alert(turns);        

     }

    </script>  
    </head>  

    <body onload="DoCenterZoom();" >     

    <div id='myMap' style="position:relative; width:400px; height:400px;">
    </div>  
    <input type='button' value='Get a walkable route' onclick='WalkingItinerate();' style=width:150px; height:150px>
    </body>

     

     

    Je désire récupérer le contenu de la variable: turns.

     

    Merci !

    vendredi 20 juin 2008 20:34

Réponses

  • Bonjour,

     

     

    Nous allons procéder par élimination :

     

    1- Avez vous ajouté le champ caché HiddenTurns dans votre page VirtualEarth ?

    Au passage, nous contrôlerons que nous nous ne sommes pas trompé dans le nom de l'objet utilisé (l'ID)

     

    Code Snippet
    <input id="hiddenTurns" type="hidden" />

     

     

     

    2- Est ce que vous attendez que la page soit complètement chargée ?

    Nous allons ajouter le code suivant pour limiter les risques :

     

    Code Snippet

    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)

    {

    HtmlElement myHiddenField;

    myHiddenField = webBrowser1.Document.GetElementById("hiddenTurns");

    MessageBox.Show(myHiddenField.OuterHtml);

    }

     

     

    3- Tester si le fichier htm a bien été copié dans votre dossier debug aprés vos modifications (logiquement oui)

     

    Amicalement,

     

     

    dimanche 22 juin 2008 08:25

Toutes les réponses

  • Bonjour Amokrane,

     

    Pour passer des valeurs de javascript vers C# vous devez utiliser les champs cachés.

     

    1- Mettre un champs caché

    Code Snippet
    <
    input id="hiddenTurns" type="hidden" runat="server"/>

     

     

    2- Modifier votre code Javascript pour affecter votre valeur turns à votre input "hiddenTurns"

    Code Snippet

    ...

    document.getElementById("hiddenTurns").value=turns;

    alert(turns);

     

     

    3- Vous pouvez maintenant lire la valeur de "hiddenTurns"

    Code Snippet

    protected void Button1_Click(object sender, EventArgs e)

    {

    Response.Write(hiddenTurns.Value);

    }

     

     

    J'espère que cela solutionnera votre problème,

     

    Amicalement,

     

     

    samedi 21 juin 2008 07:25
  •  

    Bonjour,

     

    Je vous remercie pour votre réponse, qui a l'air de répondre à mes besoins.

    En fait, je n'ai pas compris cette partie:

     

    protected void Button1_Click(object sender, EventArgs e)

    {

    Code Snippet
    Response.Write(hiddenTurns.Value);

     

     

     

    }

     

    Je n'ai pas trouvé d'objet Response. Je précise, que j'ai un Webbrowser control (metons: WebBrowser1).

    et que j'ai ajouté une page VirtualEarth.html  à mon projet.

     

     

    Response.Write; c'est plutot de l'ASP .NET non?

     

    Merci pour vos précisions.

    samedi 21 juin 2008 19:07
  •  

    Bonsoir,

     

    Merci pour la précision. 

     

    Rien ne change concernant le champ caché mais si effectivement vous avez utilisé un webbrowser, vous pouvez procéder de la manière suivante.

     

    Code Snippet

    private void btnReadTurns_Click(object sender, EventArgs e)

    {

    HtmlElement myHiddenField;

    myHiddenField = webBrowser1.Document.GetElementById("hiddenTurns");

    MessageBox.Show(myHiddenField.OuterHtml);

    }

     

     

    Par aileurs, je pense que ce post vous aidera :

     

    http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3429479&SiteID=1

     

    Bonne soirée,

     

    Amicalement,

     

     

    samedi 21 juin 2008 20:37
  • Très bien, en principe ça devrait marcher, mais avec ça:

     

     
    Code Snippet

    public Form1(){

    webBrowser1.Navigate(Path.Combine(Path.GetDirectoryName( this.GetType().Assembly.Location), "VirtualEarth.htm"));

     

    }

     

    private void btnReadTurns_Click(object sender, EventArgs e)

    {


     

    HtmlElement myHiddenField;

    myHiddenField = webBrowser1.Document.GetElementById("hiddenTurns");

    MessageBox.Show(myHiddenField.OuterHtml);

    }

     

     

     

    J'obtiens, le message d'erreur suivant: "Object reference not set to an instance of an object". (pointant vers la ligne : myHiddenField= webBrowser1.Document...) Une idée?

     

    Je vous remercie pour votre aide

    samedi 21 juin 2008 21:55
  • Bonjour,

     

     

    Nous allons procéder par élimination :

     

    1- Avez vous ajouté le champ caché HiddenTurns dans votre page VirtualEarth ?

    Au passage, nous contrôlerons que nous nous ne sommes pas trompé dans le nom de l'objet utilisé (l'ID)

     

    Code Snippet
    <input id="hiddenTurns" type="hidden" />

     

     

     

    2- Est ce que vous attendez que la page soit complètement chargée ?

    Nous allons ajouter le code suivant pour limiter les risques :

     

    Code Snippet

    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)

    {

    HtmlElement myHiddenField;

    myHiddenField = webBrowser1.Document.GetElementById("hiddenTurns");

    MessageBox.Show(myHiddenField.OuterHtml);

    }

     

     

    3- Tester si le fichier htm a bien été copié dans votre dossier debug aprés vos modifications (logiquement oui)

     

    Amicalement,

     

     

    dimanche 22 juin 2008 08:25
  •  

    Bonsoir,

     

    Effectivement la page n'était pas copiée dans le dossier debug !

    Maintenant cela fonctionne parfaitement, merci pour votre solution efficace !!

     

    J'ai eu comme résultat une chaine de caractère mêlée à des balises, des #10.3 #9 etc.., apparement un coup de Regex s'impose..

     

    Merci encore une fois.

     

     

     

     

    dimanche 22 juin 2008 14:18