我正在开发一个包含谷歌地图的ASP.NET网络应用程序。我的页面上有一个ASP.NET列表框,其中包含一个项目列表。当用户选择其中一个项目时,我想在地图上显示此项目。主要的复杂性在于谷歌地图使用javascript来控制它,而列表框是服务器控件。
我可以想到两种方法来做到这一点。第一个涉及列表框在用户选择新项目时调用javascript函数。然后我可以编写此函数来执行必要的映射操作。不幸的是,列表框的OnSelectedIndexChanged属性似乎不支持javascript函数。
第二种方法是将UpdatePanel包装在列表框周围并让列表框执行回发。在VB / C#中的SelectedIndexChanged事件中,我需要以某种方式调用javascript函数,然后更新地图。
我可以使用哪种解决方案?
由于
- 阿姆鲁
答案 0 :(得分:3)
在你的代码隐藏中(在你的页面加载中)只需向指向你的javascript函数的OnChange
属性添加一个javascript处理程序。例如:
lbYourListBox.Attributes.Add("onChange", "UpdateYourMap();");
您也可以使用内联javascript将其添加到控件中,但我更喜欢在代码隐藏中执行此操作,以便框架可以处理匹配的名称。
答案 1 :(得分:2)
您可以简单地将javascript嵌入到您的页面中,避免依赖ASP。将代码放入文档正文中:
<script language="javascript">
body.onload=function(){
var lb=document.getElementById("yourlistboxid");
lb.onChange = function(){
// put your handling code here
}
}
</script>
答案 2 :(得分:1)
演示另一种方法,这是一个粗略的指南:
void listbox_SelectedIndexChanged( ... ) {
string js = string.Format("callToMapsFunction({0});", listbox.SelectedValue);
string scriptKey = "mapscript";
ScriptManager.RegisterStartupScript( listbox, typeof(ListBox), scriptKey
, js, true);
}
RegisterStartupScript在部分回发完成后运行您提供的任何javascript。您不一定要传递列表框值 - 只要您想要提供给地图api的任何数据。前三项是为了防止脚本多次注册(据我所知)。最后的真实告诉脚本管理员在你的js代码周围自动添加开始和结束标签。