2011-11-27 1 views
0

J'ai un javascript qui doit générer dans le texte runtime.The du script est en classe de générer contrôleur:javascript dynamique dans ASP.Net MVC 3.0 + Razor

private string mapString 
{ 
    get 
    { 
     Locations loc = new Locations(); 
     string appPath = Request.ApplicationPath; 
     loc.ReadXml(Path.Combine(Request.MapPath(appPath) + "\\App_Data", "Locations.xml")); 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < loc.Specfications.Count; i++) 
     { 
      sb.Append("var myLatLng" + i.ToString() + "= new google.maps.LatLng(" + loc.Specfications[i].Y.ToString() + "," + 
      loc.Specfications[i].X.ToString() + ");"); 
      sb.Append(" var beachMarker" + i.ToString() + " = new google.maps.Marker({position: myLatLng" + i.ToString() + ",map: map,icon: image,title:'" + loc.Specfications[i].Title + "'});"); 

.... 

... 

... 

     ViewData["MapString"] = mapString; 

Quand je l'utilise dans la balise de script:

<script type="text/javascript"> 

       function initialize() { 
       @Server.HtmlDecode(ViewData["MapString"].ToString()) 

       } 

</script> 

il ne marche pas retourner un vrai texte et retruns quelque chose comme ceci:

contentString0 = ' < largeur de table = " 100% " style = " famille de polices: tahoma; text-align: droit; police

** Mise à jour: Le site n'a pas montré ma question correctement, je veux montrer "' <" mais il montre " » <"

mais il doit retourner: contentString0 = 'vous voir qu'il convertit "'<" en "' <". Mais quand j'utilise: @ Server.HtmlDecode (ViewData ["MapString"]. ToString()) à partir de balise de script, tout est OK.

+1

Tout d'abord, pourquoi auriez-vous besoin de générer votre javascript dans votre contrôleur? Autant que je peux voir que vous passez la longitude et la latitude à Goole Maps API. Pourquoi ne pas créer une action Contrôleur qui ne retournerait que les données dont vous avez besoin en tant qu'objet JSON? – torm

+0

Comment puis-je le faire? Pouvez-vous donner un exemple? Oui, je veux marquer sur google map dyanmicaly. – Shayan

Répondre

1

Vous pouvez le faire de cette façon, que je pense va être plus souple que la génération du code dans votre contrôleur:

Action de contrôleur:

public JsonResult GetCoords() 
    { 
     // your code here - im putting a generic result you may 
     // need to put some logic here to retrieve your location/locations 

     var result = new { lon = "51.0000", lat = "23.0000" }; 
     return Json(result, JsonRequestBehavior.AllowGet); 

    } 

à votre avis ajouter:

<script type="text/javascript"> 
     $(document).ready(function() { 

      $.getJSON('/YourController/GetCoords', function (jsonData) { 

       var lon = jsonData.lon; 
       var lat = jsonData.lat; 

       yourGoogleMapFunction(lon, lat); 

      }); 
     }); 
    </script> 
+0

Le fichier getJSON de votre exemple de travail fonctionne.Je télécharge JQery1.7.js à partir du site JQuery mais l'exemple n'a pas fonctionné. – Shayan

+0

S'il vous plaît me montrer votre code pour que je puisse vous aider – torm

+0

dans ma classe de contrôleur: [HttpPost] GetCoords de JsonResult publique() { // votre code ici - im mettre un résultat générique vous pouvez // besoin de mettre un peu logique ici pour récupérer votre emplacement/emplacements var résultat = nouveau {lon = "51.0000", lat = "23.0000"}; return Json (result, JsonRequestBehavior.AllowGet); } – Shayan