4

Google マップに複数のマーカーを追加しようとしています。私は .NET MVC 4 を使用しており、すべての座標を含む配列を使用して ViewModel を View に渡しています。これらすべてを Google マップに表示したいと考えています。配列は、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 であり、iJavaScript の変数でもあります。配列は C# からのものであるため、直接的な関係はありませlatLngCoordinatesん。

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

これにより、forステートメントが C# コードになります。これiで、モデルの配列と has 関係ができました。addMarker長さに応じて多くの機能を印刷しますlatLngCoordinates

于 2013-06-19T16:56:47.867 に答える