4

我正在尝试向 Google 地图添加多个标记。我正在使用 .NET MVC 4,并且我将一个 ViewModel 传递给 View,其中包含一个包含所有坐标的数组。我想将所有这些显示到谷歌地图中。该数组在 ViewModel 中被命名为 latLngCoordinates。

@model Project.Web.ViewModels.ParkingViewModel

出错的代码:

for (var i = 0; i < @Model.latLngCoordinates.Length; i++) {
            addMarker(@Model.latLngCoordinates[i]);
}

错误:当前上下文中不存在名称“i”。

此代码工作正常:

<script type="text/javascript"
  src="http://maps.googleapis.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(51.92479, 4.469833),
            zoom: 14,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map"),
        mapOptions);

        for (var i = 0; i < @Model.latLngCoordinates.Length; i++) {
            addMarker(51.918769, 4.480616);
        }

        function addMarker(x, y) {
            var location = new google.maps.LatLng(x, y);
            var marker = new google.maps.Marker({
                position: location,
                map: map,
            });
        }

    } google.maps.event.addDomListener(window, 'load', initialize);
</script>

如果我使用:

addMarker(@Model.latLngCoordinates[1])

或任何其他高达 97 的值都有效..

4

1 回答 1

5

你把 JavaScript 和 C# 搞混了。这是 Razor 视图上的常见错误。

您的for循环是 JavaScript,JavaScripti的变量也是如此。您的latLngCoordinates数组来自 C#,因此它们没有直接关系。

@for (var i = 0; i < Model.latLngCoordinates.Length; i++) {
    Html.Raw("addMarker(" + Model.latLngCoordinates[i] + "); ");
}

这使您的for语句成为 C# 代码。所以现在,i与你的模型数组有关系。addMarker当你得到latLngCoordinates长度时,它将打印许多功能。

于 2013-06-19T16:56:47.867 回答