2009-10-06 2 views
0

Я просто попадаю в asp.net mvc и jquery, так что это может быть «глупый» вопрос.Проблема с asp.net mvc и google maps

Я разрабатываю приложение mvc, которое содержит карту Google.

Я использовал этот пост в блоге, как вдохновение

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

и он работает, как ожидалось.

Проблема возникает, когда я хочу фильтровать данные карты.

Прецедент является следующее:

  1. У меня есть мнение со списком элементов.
  2. Для каждого элемента у меня есть ссылка «Трассировка».
  3. Ссылка указывает на действия контроллера и имеет идентификатор элемента в качестве параметра.
  4. Действие контроллера возвращает вид.
  5. мнения имеют некоторые JavaScript, который вызывает другие действия контроллера
  6. Действие контроллера возвращает мои данные карты в формате JSON
  7. Сценарий инициализирует карту Google и отображает данные в формате JSON на карте.

У меня проблемы с 4. Ядро проблемы заключается в получении идентификатора исходного элемента для действия, которое возвращает данные JSON.

Это то, что я пробовал.

Я создал класс параметров, который имеет общедоступное свойство int id. Вид карты использует этот класс как «Просмотр класса данных»

В представлении я добавил скрытое поле ввода, которое заполняется значением id из класса данных.

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

После этого я включаю файлы 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 верное.

Использование firebug Я получаю эту ошибку: 500 Внутренняя ошибка сервера. И ссылка, которую он пытается вызвать, такова: http://localhost:63246/Maptest/Element/Tracemap?_=1254848265779&id=18

Если я изменяю параметр действия на строку. Точка разрыва попадает, но тогда id пуст.

Любые идеи, как это решить? Или другие способы получить идентификатор элемента в действие контроллера JSON?

+0

Как ваша настройка маршрутизации? –

ответ

0

Я считаю, что вы можете столкнуться с проблемой маршрутизации URL-адресов. Чтобы получить параметр id в вашем контроллере, вам нужно сделать его частью вашего URL: «/ Maptest/Element/Tracemap/18».

в вызове JQuery, я бы просто сделать это:

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

Я не уверен, если вы будете нуждаться в «нулевой» для параметра данных. Попробуйте и без него.

Смежные вопросы