2009-10-06 111 views
0

我刚刚进入asp.net mvc和jquery,所以这可能是一个“愚蠢”的问题。问题与asp.net mvc和谷歌地图

我正在开发一个包含Google Map的mvc应用程序。

我用这个博客文章作为灵感

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

,它的工作如预期。

当我想过滤地图数据时发生问题。

用例是:

  1. 我有元件的列表的图。
  2. 对于每个元素,我都有一个“跟踪”链接。
  3. 指向控制器操作的链接并具有元素ID作为参数。
  4. 控制器操作返回一个视图。
  5. 的观点有一些JavaScript调用另一个控制器动作
  6. 控制器动作返回我的地图数据作为JSON
  7. 脚本初始化一个谷歌地图,并在地图上显示的JSON数据。

我遇到问题4.问题的核心是获取原始元素的id到返回JSON数据的操作。

这是我试过的。

我创建了一个具有public int id属性的参数类。地图视图使用这个类作为“查看数据类”

在视图中,我添加了一个隐藏的输入字段,该字段用数据类中的id值填充。

<input type="hidden" id="_lblId" value="<%=Model.Id%>"/> 

之后,我包括了应该加载Map的JavaScript文件,从控制器中获取地图数据。

这是我遇到问题的地方。

的jQuery:

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

控制器动作:

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); 

    } 

如果我在控制器动作设置断点它永远不会被调用。如果我调试javascript的id值是正确的。

使用萤火虫我得到这个错误:500内部服务器错误。它试图调用的链接是:http://localhost:63246/Maptest/Element/Tracemap?_=1254848265779&id=18

如果我将操作参数更改为字符串。中断点被击中,但是id为空。

任何想法如何解决这个问题?或者其他方式获取元素Id到JSON控制器操作?

+0

你的路由设置如何? – 2009-12-14 16:02:51

回答

0

我相信你可能遇到的是一个URL路由问题。要获得控制器中的id参数,您需要将其设置为URL的一部分:“/ Maptest/Element/Tracemap/18”。

在jQuery的电话,我只想做到这一点:

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

我不是正面的,如果你需要“空”的数据参数。尝试与没有它。