2009-10-06 60 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); 

我不是正面的,如果你需要「空」的數據參數。嘗試與沒有它。