2013-09-30 3 views
1

Я хочу добавить более одного маркера буклета на карту через кодовое слово. Моя C# выглядит следующим образом:Как добавить несколько маркеров в листовку через codebehind

public void setMarker(double[] lat, double[] lng) 
{ 
    string script = string.Empty; 

    for (int i = 0; i < lat.Length; i++) 
    { 
     script = string.Format(@"<script language=""Javascript""> 
        addMarker('{0}','{1}') 
        </script>", lat[i], lng[i]); 

     Page.ClientScript.RegisterStartupScript(this.GetType(), "onMapClick", script); 
    } 
} 

, где широта и LNG являются массивы, которые имеют одинаковую длину и удерживать предопределены точки, где я хочу, чтобы маркеры появляются координаты.

мой addMarker() определяется в JavaScript как:

function addMarker(lat, lng) 
    { 
     var myLatLng = new L.LatLng(lat, lng); 
     L.marker(myLatLng, { icon: greenIcon, draggable: true }).addTo(Mymap); 
    } 

, если я вызываю такую ​​же функциональность от события щелчка мыши, а затем, где каждый я нажимаю, маркеры просто добавляются. как заставить все маркеры оставаться на карте при использовании моих функций?

ответ

3

Клиентский скрипт уникально идентифицирован его ключом и его типом. Скрипты с одним и тем же ключом и типом считаются дублирующими. На странице может быть зарегистрирован только один скрипт с заданным типом и парой ключей.

В вашем случае я бы просто добавить все звонки в вашу функцию, чтобы блокировать один сценарий, а затем зарегистрировать его один раз (вне цикла):

StringBuilder startupScript = new StringBuilder(); 
startupScript.Append(@"<script language=""Javascript"">"); 
for (int i = 0; i < lat.Length; i++) 
{ 
    startupScript.AppendFormat(@"addMarker('{0}','{1}'); ", lat[i], lng[i]); 
} 
startupScript.Append(@"</script>"); 
Page.ClientScript.RegisterStartupScript(this.GetType(), "onMapClick", startupScript.ToString());