1

所以我在一个 asp.net MVC4地理定位项目中工作,我的 foreach 循环有问题,我的地图只显示最后一个位置,这是我的视图代码:

@model  List<AgencyWebApplication.Models.HomeModel>
 @foreach(var ch in Model)
    {
    <script>
        var city = '@Html.Raw(ch.adress)';
        var attitude = '@Html.Raw(ch.attitude)';
        var longitude = '@Html.Raw(ch.longidue)';
        var indice = '@Html.Raw(ch.indice)';
        var array = [[city, attitude, longitude, indice]];
    </script>
    }
    <script src="@Url.Content("~/Scripts/Map.js")" type="text/javascript"></script>
    <input type="submit" name="Go" value="Go" onclick="getMap(array)" />
    <div id="map_canvas" style="width:600px; height:400px"></div>

这是我的地图脚本代码:

function getMap(array) {

var myLatlng = new google.maps.LatLng(35.728329, -5.882750);
var mapOptions = {
    center: myLatlng,
    zoom: 17,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

setMarkers(map, array);
}

function setMarkers(map, locations) {

for (var i = 0; i < locations.length; i++)
{
    var place = locations[i];
    var myLatLng = new google.maps.LatLng(place[1], place[2]);

    var marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: place[0],
        zIndex: place[3]
    });
}
return marker;
}

因此,如果您有任何想法,我将不胜感激。

4

2 回答 2

1

将您的模型序列化为视图模型属性并在脚本中获取它

public class Geo{
 public string city{get;set;}
 public Decimal lat{get;set;}
 public Decimal lng {get;set;}
}

和视图模型

public class ViewModel{
 //other props
 public string GeoData{get;set;}
}

从数据库中填充它

 var ViewModel vm = new ViewModel();
 vm.GeoData = new JavaScriptSerializer.serialze(/*get the Geo data and pass it here*/);

现在在视图中

<script>
 var geoData = $.parseJSON('@Html.Raw(Model.GeoData)');
 //here you can iterate the geo data and make use of it 
</script>

未经测试的代码可能包含一些语法错误,也推荐使用Json.Net进行序列化

于 2013-04-20T13:14:45.400 回答
0

您的 foreach 每次都会重新分配变量“数组”,因此在加载页面时只有最后一个存在。尝试在浏览器中查看页面源代码,您会明白我的意思。

您每次都需要将新值连接到数组。也许在循环上方分配数组并在循环内执行 array.push() 。

于 2013-04-20T13:06:44.857 回答