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

    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 !

    Friday, June 20, 2008 8:34 PM

Answers

  • 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,

     

     

    Sunday, June 22, 2008 8:25 AM

All replies

  • 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,

     

     

    Saturday, June 21, 2008 7:25 AM
  •  

    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.

    Saturday, June 21, 2008 7:07 PM
  •  

    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,

     

     

    Saturday, June 21, 2008 8:37 PM
  • 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

    Saturday, June 21, 2008 9:55 PM
  • 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,

     

     

    Sunday, June 22, 2008 8:25 AM
  •  

    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.

     

     

     

     

    Sunday, June 22, 2008 2:18 PM