Javascript 通过用于映射服务器端脚本的ClientScriptManager的事件侦听器
我和markers的事件监听器有问题, 在这里,我已经在服务器端使用LINQ成功地填充了映射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 当它运行并且所有标记都出现时没有
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>