Javascript 通过用于映射服务器端脚本的ClientScriptManager的事件侦听器

Javascript 通过用于映射服务器端脚本的ClientScriptManager的事件侦听器,javascript,asp.net,google-maps,Javascript,Asp.net,Google Maps,我和markers的事件监听器有问题, 在这里,我已经在服务器端使用LINQ成功地填充了映射 var x = from a in db.project_profiles select new { a.project_gis_latitude, a.project_gis_longitude, a.project_title }; Csm 当它运行并且所有标记都出现时没有

我和markers的事件监听器有问题, 在这里,我已经在服务器端使用LINQ成功地填充了映射

var x = from a in db.project_profiles
        select new
        {
             a.project_gis_latitude,
             a.project_gis_longitude,
             a.project_title
        };
Csm

当它运行并且所有标记都出现时没有错误,但是侦听器只对加载的最后一个标记做出响应,我希望所有标记都有侦听器,而不仅仅是一个,这样我可以在单击时检索它们的标题

我试图将listener块移出foreach组,但同样的事情发生了,只能单击最后一个标记

这是地图的html

<div id="dvMap"></div>

它只在最后一个标记上附加了一个click函数,因为在代码中循环生成标记,而不是javascript。对于循环中的每个项目,您都创建了相同的
var标记
,因此从JavaScript的角度来看,映射上只有一个标记可以附加函数

您必须确保每个
lat_lng
marker
都有一个唯一的ID

int counter = 0;
foreach (var z in x)
{
    //sb.Append("alert('"+z.project_title+"');");
    sb.Append("     var lat_lng" + counter + " = new google.maps.LatLng(" + z.project_gis_latitude + ", " + z.project_gis_longitude + ");       ");
    sb.Append("     var marker" + counter + " = new google.maps.Marker({     ");
    sb.Append("     position: lat_lng" + counter + ",     ");
    sb.Append("     map: map,     ");
    sb.Append("     title: '" + z.project_title + "',   ");
    sb.Append("     label: '" + z.project_title.Substring(0, 1) + "'   ");
    sb.Append("     });   ");


    sb.Append("     marker" + counter + ".addListener('click', function() {   ");
    sb.Append("     map.setZoom(10);   ");
    sb.Append("     map.setCenter(marker" + counter + ".getPosition());   ");
    sb.Append("    });   ");

    counter++;
}
更好的做法是创建地图坐标的javascript数组并在客户端执行循环。看看这个。它有一个JavaScript数组。例如,您可以在代码隐藏中以字符串形式创建该数组,并将其写入
文本中

更新

更好的方法是向页面发送一个只包含地图坐标的字符串,并在客户端循环该位置数组

public string javaScriptLocations = string.Empty;

protected void Page_Load(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("var locations = [");

    for (int i = 0; i < x.Count; i++)
    {
        sb.Append("['Location " + i + "', " + z.project_gis_latitude + "," + z.project_gis_longitude + ", " + i + "],");
    }

    javaScriptLocations = sb.ToString().TrimEnd(',') + "];";
}
publicstringJavaScriptLocations=string.Empty;
受保护的无效页面加载(对象发送方、事件参数e)
{
StringBuilder sb=新的StringBuilder();
sb.追加(“var位置=[”);
对于(int i=0;i
ASPX页

<script type="text/javascript">
    <%= javaScriptLocations %>

    //map stuff
</script>

//地图资料

谢谢你的回答,我想要它怎么工作就怎么工作,我也尝试了你的建议,因为在客户端编写javascript更容易,但我在将变量从服务器传递到客户端时遇到了麻烦。
public string javaScriptLocations = string.Empty;

protected void Page_Load(object sender, EventArgs e)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("var locations = [");

    for (int i = 0; i < x.Count; i++)
    {
        sb.Append("['Location " + i + "', " + z.project_gis_latitude + "," + z.project_gis_longitude + ", " + i + "],");
    }

    javaScriptLocations = sb.ToString().TrimEnd(',') + "];";
}
<script type="text/javascript">
    <%= javaScriptLocations %>

    //map stuff
</script>