2016-02-19 145 views
0

我有一个asp.net应用程序,我试图在其上使用Google地图。当我尝试通过字符串数组的JavaScript,每这篇文章:将字符串[]传递给javascript

Passing value to javascript from asp.net

我在ASPX形式设置:

var locations = "<%=data %>"; 

调试正在评估这样的位置:

var locations = "System.String[]";

我的数据属性设置是这样的:

protected string[] data; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    data = new string[] { "26.2486591339111,-80.2002334594727", "26.2344417572021,-80.1393356323242", "26.0818271636963,-80.2083358764648", "26.2701854705811,-80.1152496337891", "26.2009468078613,-80.1440734863281" }; 
} 

我不是在位置得到任何经/纬度值。我究竟做错了什么?

我是比较新的Javascript,所以请种:D

谢谢!

编辑#1

我也尝试“和”的<%=data %>周围,既没有了作用。

编辑#2

的ASPX的情况下,身体可以帮助:

<body> 
    <div id="map" style="width: 500px; height: 400px;"></div> 

    <script type="text/javascript"> 
     //var locations = [ 
     // ['Bondi Beach', -33.890542, 151.274856, 4], 
     // ['Coogee Beach', -33.923036, 151.259052, 5], 
     // ['Cronulla Beach', -34.028249, 151.157507, 3], 
     // ['Manly Beach', -33.80010128657071, 151.28747820854187, 2], 
     // ['Maroubra Beach', -33.950198, 151.259302, 1] 
     //]; 

     var locations = '<%=data %>'; 

     var map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 10, 
      center: new google.maps.LatLng(-33.92, 151.25), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }); 

     var infowindow = new google.maps.InfoWindow(); 

     var marker, i; 

     var pinColor = "#"; 
     for (k = 0; k < 3; k++) { 
      pinColor += ("0" + (Math.random() * 256 | 0).toString(16)).substr(-2); 
     } 

     var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor, 
        new google.maps.Size(21, 34), 
        new google.maps.Point(0, 0), 
        new google.maps.Point(10, 34)); 
     var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow", 
        new google.maps.Size(40, 37), 
        new google.maps.Point(0, 0), 
        new google.maps.Point(12, 35)); 

     for (i = 0; i < locations.length; i++) { 
      marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
       icon: pinImage, 
       shadow: pinShadow, 
       map: map 
      }); 

      google.maps.event.addListener(marker, 'click', (function (marker, i) { 
       return function() { 
        infowindow.setContent(locations[i][0]); 
        infowindow.open(map, marker); 
       } 
      })(marker, i)); 
     } 
    </script> 
</body> 

回答

3

.NET数组没有ToString()你期望的方法 - 它正在使用Object的基类实现,它只是返回类型名称(System.String []),而不是对实际数据进行字符串化。需要

var locations = "<%=Html.Raw(new JavascriptSerializer().Serialize(data)) %>"; 

Html.Raw避免HTML编码的JSON的:

直白的解决方法(但不是好),你需要实现自己的串转换器,或者只是串行化数据为JSON如下。

PS:这不是建议使用MVC服务器端注入构建javascript的方法。我强烈建议单独调用以使用Ajax加载数据,或者至少将其呈现在HTML中,然后使用Javascript读取。

+0

OP阅读他的** **其良好的建议 – zgood

0

更简单一个。

var locations = ["<%= string.Join(",", data) %>"];