2015-06-22 188 views
0

我想從我的MVC模型項目中繪製多個動態谷歌地圖標記。我能夠通過硬編碼來做到這一點,但不是動態的。我錯過了什麼?MVC動態谷歌地圖標記

function codeAddress(index, value) 
    { 
     //var addressArray = ['Canada', 'India', 'America']; 
     //$.each(addresses, function() 
     //{ 
     // var addresses = value.ASSET_NAME; 
     //}); 
     @for (int i = 0; i < Model.Count(); i++) 
     { 
      var addressArray = Model[i].ASSET_NAME; 
     } 

     //var geocoder = new google.maps.Geocoder(); 

     for (var x = 0; x < addressArray.Count(); x++) 
     { 
      geocoder.geocode({ 'address': addressArray[x] }, function (results, status) 
      { 
       if (status == google.maps.GeocoderStatus.OK) 
       { 
        var marker = new google.maps.Marker({ 
         map: map, 
         position: results[0].geometry.location      
        }); 
       } else { 
        alert("Geocode was not successful for the following reason: " + status); 
       } 
      }); 
     } 
    } 
+0

考慮這個樣品http://www.jmelosegui.com/map/marker/DataBindingToModel –

回答

0

由於範圍的原因,您的addressArray只存在於for循環中。這就是爲什麼當您嘗試獲取addressArray.Count()時出現錯誤;

代替,使空數組首先是這樣的:

var addressArray = []; 

和而不是覆蓋addressArray,您應push這樣的:

for (int i = 0; i < Model.Count(); i++) 
    { 
     addressArray.push(Model[i].ASSET_NAME); 
    } 

= - = - = - 編輯 - = - = - =

我的壞,不知何故,我認爲這是純粹的JavaScript。可悲的是我不知道關於asp.net,但你應該使用asp.net建立一個JavaScript數組字符串,並將其分配給Javascript地址數組。 所以,我覺得你可以嘗試這樣的事情,而不是:

@{ 
var addressArray = '['; 
for (int i = 0; i < Model.Count(); i++) 
    { 
     if (i!=0){ 
      addressArray = addressArray + ','; 
     }; 
     addressArray = addressArray + '"' + Model[i].ASSET_NAME+ '"' ; 
    }; 
addressArray = addressArray + ']'; 
} 

var addressArray = @addressArray; 
+0

與上面的代碼我得到錯誤「addressArray不存在於當前的上下文中「for(int i = 0; i

+0

哦,我的不好,我看到現在發生了什麼..你的模型是在asp.net .... – kaho

+0

謝謝Kaho。讓我試試你的方式。 –