2013-09-06 2 views
0

Я не уверен, что я использую правильную терминологию, но вот что я пытаюсь сделать ... У меня есть asp.net которая загружает карту Google, а затем добавляет маркеры из данных JSON, которые создаются в методе на странице с кодом. При первоначальной загрузке все работает нормально. Однако, если я вызываю функцию refreshTheMarkers() с помощью нажатия кнопки, переменная «грузовики» в функции populateTheMap (третья строка кода) не получает обновленную строку JSON, она по-прежнему остается той же строкой JSON, что и когда страница была первоначально загружен. Есть ли способ «заставить» метод ConvertDataTabletoString обновиться?Обновить элемент данных javascript из asp.net datatable без перезагрузки страницы

<script type="text/javascript"> 
    var map; 
    var infoWindow; 
    var markersArray = []; 
    var sbarDiv; 
    var trucks; 

    function initialize() { 
     var mapOptions = { 
      center: new google.maps.LatLng(50.08, -82.8), 
      zoom: 11, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     infoWindow = new google.maps.InfoWindow(); 
     map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
     sbarDiv = document.getElementById('sbDivMain'); 

     populateTheMap(true); 
    } 

    function populateTheMap(onStartup) { 
     clearExistingMarkers(); 
     var sbarhtml = ''; 
     trucks = JSON.parse('<%=ConvertDataTabletoString() %>'); 
     var bounds = new google.maps.LatLngBounds(); 

     for (var i = 0; i < trucks.length; i++) { 
      var truck = trucks[i]; 
      var point = new google.maps.LatLng(parseFloat(truck.Latitude), parseFloat(truck.Longitude)); 
      bounds.extend(point); 

      var marker = createMarker(point, truck); 
      var sidebarEntry = createSidebarEntry(marker, truck); 
      sbarDiv.appendChild(sidebarEntry); 
     } 

     // Center the map only on startup 
     if (onStartup) { 
      var pointCenter = bounds.getCenter(); 
      var iZoomLevel = map.fitBounds(bounds); 
      if (iZoomLevel > 15) { iZoomLevel = 15; } 
      map.setCenter(pointCenter, iZoomLevel); 
     } 
    } 

    function refreshTheMarkers() { 
     clearExistingMarkers(); 
     populateTheMap(false); 
    } 

    function clearExistingMarkers() { 
     if (markersArray) { 
      for (i in markersArray) { 
       markersArray[i].setMap(null); 
      } 
      markersArray.length = 0; 
     } 
     //clear side bar entries 
     sbarDiv.innerHTML = ''; 

    } 
// plus some additional code... 

Вот код-за страницы ...

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 

namespace LiveCadWebApp 
{ 
    public partial class GPSTracking : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     // Convert the DataTable to a JSON string 
     public string ConvertDataTabletoString() 
     { 
      DataTable dt = new DataTable(); 
      using (SqlConnection con = new SqlConnection(@"Server=.\SQLExpress;Database=MyDatabase;Trusted_Connection=True;")) 
      { 
       using (SqlCommand cmd = new SqlCommand("SELECT * FROM vwTruckGPSStatusInformation", con)) 
       { 
        con.Open(); 
        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        da.Fill(dt); 

        return GetJSONFromDataTable(dt); 
       } 
      } 
     } 

По сути то, что я хочу сделать, это перезагрузить маркеры каждые несколько секунд без перезагрузки карты Google ...

ответ

0

Вы делаете Ajax вызов веб-методы, чтобы получить обновленную JSon проверку

эти примеры http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

+1

Ну, после того, как я, наконец, узнал некоторые основы о jQuery, этот ответ, наконец, имел смысл ... спасибо! –

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