5

gmapに複数のマーカーを表示する次のコードがあります

<script type="text/javascript">

        function init() {
            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 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;

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

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

これを動的にしたいので、これを渡す必要があります

 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]
            ];

C# コードからこの js まで。

隠しフィールドとこのコードを試しました

 List<String> oGeocodeList = new List<String>
                                         {
                                            "'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 geocodevalues = string.Join(",", oGeocodeList.ToArray());
        ClientScript.RegisterArrayDeclaration("locations", geocodevalues);

しかし、運が悪いと、参考になるものはありません

4

5 に答える 5

6

基本的に、あなたがしようとしていると私が信じているのは、JSON文字列を作成することです。JSONJavaScript や C# を含む多くの言語間でオブジェクトをシリアル化された文字列形式で渡すことができます。JSON .NET ライブラリを参照することをお勧めします。これは、C# で文字列との間でアイテムを安全かつ効率的にシリアル化できる素晴らしいライブラリです。

また、多次元配列を渡す代わりに、より多くの OOP 構造を作成することをお勧めします。これを行うには、場所のクラスを作成する必要があります。ここでは、次のことを前提としています。

public class Location
{
    public string Name { get; set; }
    public double Lat { get; set; }
    public double Lng { get; set; }
}

次に、 をList<Location>作成し、JSON .NET ライブラリを使用してそれをシリアル化します。これは次のように簡単です。

List<Location> oGeocodeList = new List<Location>() {
    //...
};

string json = JsonConvert.SerializeObject(oGeocodeList);

この JSON を非表示フィールドに書き込むか、JavaScript 内の変数に書き込む必要があります。これにより、JavaScript を使用してページで参照できるようになります。かなり包括的なドキュメントもあり、非常に便利です!

これは、次のように、JavaScript で他の js オブジェクトとしてアクセスできます。

for (i = 0; i < locations.length; i++) {
    marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i].Lat, locations[i].Lng),
        map: map
    });

    // ...
}
于 2012-08-06T11:06:29.390 に答える
1

Json.Netまたは C# Json エンコーダーを使用して、C# をJson にエンコードします。次に、隠しフィールドに書き込みます。次に、 Json2を使用して JavaScript 側でデコードします

于 2012-08-06T11:01:14.900 に答える