我刚刚进入asp.net mvc和jquery,所以这可能是一个“愚蠢”的问题。问题与asp.net mvc和谷歌地图
我正在开发一个包含Google Map的mvc应用程序。
我用这个博客文章作为灵感
http://mikehadlow.blogspot.com/2008/10/using-google-maps-with-mvc-framework.html
,它的工作如预期。
当我想过滤地图数据时发生问题。
用例是:
- 我有元件的列表的图。
- 对于每个元素,我都有一个“跟踪”链接。
- 指向控制器操作的链接并具有元素ID作为参数。
- 控制器操作返回一个视图。
- 的观点有一些JavaScript调用另一个控制器动作
- 控制器动作返回我的地图数据作为JSON
- 脚本初始化一个谷歌地图,并在地图上显示的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控制器操作?
你的路由设置如何? – 2009-12-14 16:02:51