2009-10-06 6 views
0

Je suis juste en train d'entrer dans asp.net mvc et jquery alors cela pourrait être une question "stupide".Problème avec asp.net mvc et google maps

Je développe une application mvc qui contient une carte Google Map.

Je l'ai utilisé ce blog comme une source d'inspiration

http://mikehadlow.blogspot.com/2008/10/using-google-maps-with-mvc-framework.html

et cela fonctionne comme prévu.

Le problème se produit lorsque je veux filtrer les données cartographiques.

Le cas d'utilisation est la suivante:

  1. J'ai vue avec une liste d'éléments.
  2. Pour chaque élément, j'ai un lien "Trace".
  3. Le lien pointe vers une action du contrôleur et possède l'identifiant de l'élément en paramètre.
  4. L'action du contrôleur renvoie une vue.
  5. La vue a un certain javascript qui appelle une autre action du contrôleur
  6. L'action du contrôleur renvoie mes données cartographiques JSON
  7. Le script initialise une carte Google et affiche les données JSON sur la carte.

Je rencontre des problèmes à 4. Le cœur du problème consiste à obtenir l'ID de l'élément d'origine à l'action qui renvoie les données JSON.

C'est ce que j'ai essayé.

J'ai créé une classe de paramètres qui possède une propriété publique int id. La vue de carte utilise cette classe comme "Afficher la classe de données"

Dans la vue, j'ai ajouté un champ de saisie masqué qui est rempli avec la valeur d'ID de la classe de données. Après cela, j'inclus les fichiers javascript qui doivent charger la carte et obtenir les données de la carte de l'automate.

C'est là que je rencontre des problèmes.

jQuery:

$(function() { 
var id = parseInt($("#_lblId").val()); 
$.ajaxSetup({ cache: false }); 
if (google.maps.BrowserIsCompatible()) {    
    $.getJSON("/Maptest/Element/Tracemap", {id: id}, initialise); 
} 
}); 

action Contrôleur:

public ActionResult Tracemap(int id) 
    { 

     var map = new Map(); 

     var tracedata = _dataRep.ListSkanningerPaaKomponent(Convert.ToInt32(id)); 
     map.Name = "trace for element - " +id; 
     map.Zoom = 2; 
     map.LatLng = new LatLng { Latitude = 0.0, Longitude = 0.0 }; 
     var cnt = 0; 
     foreach (var t in tracedata) 
     { 
      cnt++; 

      var trace = new Trace 
          { 
           Name = "Trace " + cnt, 
           LatLng = new LatLng {Latitude = (double) t.Lat,     Longitude = (double) t.Long}, 
           Dato = (DateTime) t.Dato, 
           Tid = (DateTime) t.Tid, 
           Person = t.PersonId 
      }; 
      map.Add(trace); 
     } 

     return Json(map); 

    } 

Si je mets un point d'arrêt dans l'action du contrôleur, il ne sera jamais appelé. Si je débogue le javascript, la valeur d'id est correcte. En utilisant firebug, j'obtiens cette erreur: 500 Erreur interne du serveur. Et le lien qu'il essaie d'appeler est le suivant: http://localhost:63246/Maptest/Element/Tracemap?_=1254848265779&id=18

Si je change le paramètre d'action en chaîne. Le point de rupture est atteint, mais id est vide.

Des idées pour résoudre ce problème? Ou d'autres moyens d'obtenir l'Id de l'élément à l'action du contrôleur JSON?

+0

Comment se passe votre configuration de routage? –

Répondre

0

Je crois que ce que vous pourriez rencontrer est un problème de routage d'url. Pour obtenir le paramètre id dans votre contrôleur, vous devez l'inclure dans votre url: "/ Maptest/Element/Tracemap/18".

dans votre appel jQuery, je voudrais simplement faire ceci:

var url = "/Maptest/Element/Tracemap/" + id; 
$.getJSON(url, null, initialise); 

Je ne suis pas positif si vous aurez besoin du « null » pour le paramètre de données. Essayez avec et sans.