2012-06-27 38 views
0

我正在一個asp.net mvc3應用程序。谷歌地圖不顯示在局部視圖

我試圖加載的局部視圖內的谷歌地圖,但它不工作:

我的部分觀點_Map.cshtml

<style type="text/css"> 
    #map_canvas 
    { 
     position:absolute; 
     top:40px; 
     left:12px; 
     width:576px; 
     height: 450px; 
    } 

</style> 
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<div class="sTitle">Name</div> 

<div id="map_canvas"></div> 


<script type="text/javascript"> 
var map; 
$(document).ready(function() { 
    var map; 
    var myOptions = { 
     zoom: 8, 
     center: new google.maps.LatLng(-34.397, 150.644), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById('map_canvas'), 
     myOptions); 

    google.maps.event.addDomListener(window, 'load', initialize); 
}); 

</script> 

地圖加載通過Ajax調用:

  $.ajax({ 
       type: 'GET', 
       url: '@Url.Action("GetMapById", "Map")', 
       data: { 'id': sId }, 
       success: function (html) { 
        $("#content").html(html); 
       }, 
       complete: function() { 
       }, 
       error: function() { 
        alert("There was an error opening the Map. Please try again or contact an administrator"); 
       } 
      }); 

的部分被裝入名爲Content

一個div並在CON troller我只是返回部分視圖

return PartialView("_Map"); 

視圖正在加載,但地圖不可見。

我用螢火蟲來跟蹤這個問題,我得到這個錯誤:

「google is not defined」 

有關該問題的任何想法?

非常感謝

回答

1

我通過把這個

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 

在佈局網頁NAD沒有在子視圖解決了這個

+0

我碰到同樣的問題。我不想在佈局頁面中加載地圖,因爲這會明顯延遲加載網站的其他部分,無論出於何種原因,地圖腳本都需要很長時間才能加載。該問題還存在其他哪些解決方案? – pookie

0

您需要加載谷歌地圖這樣:

<script type="text/javascript"> 
    var map; 
    google.load("maps", "3", { other_params:"sensor=false" }); 
    $(document).ready(function() { 

你重新初始化「VAR地圖」兩次。

0

我不想加載地圖在佈局網頁...這樣做將意味着如果腳本需要很長時間才能加載,則會減慢整個頁面的速度,此外,如果不需要,那麼爲什麼要讓瀏覽器下載呢?

要解決這個問題,我發現,你可以在你的局部視圖加載地圖API是這樣的:

$.getScript('http://maps.googleapis.com/maps/api/js',function(){ 
    google.maps.event.addDomListener(window, 'load', initialize); 
});