使用Javascript检测用户何时在ASP.NET列表框中选择了一个项目

时间:2010-03-16 17:15:21

标签: asp.net javascript ajax listbox

我正在开发一个包含谷歌地图的ASP.NET网络应用程序。我的页面上有一个ASP.NET列表框,其中包含一个项目列表。当用户选择其中一个项目时,我想在地图上显示此项目。主要的复杂性在于谷歌地图使用javascript来控制它,而列表框是服务器控件。

我可以想到两种方法来做到这一点。第一个涉及列表框在用户选择新项目时调用javascript函数。然后我可以编写此函数来执行必要的映射操作。不幸的是,列表框的OnSelectedIndexChanged属性似乎不支持javascript函数。

第二种方法是将UpdatePanel包装在列表框周围并让列表框执行回发。在VB / C#中的SelectedIndexChanged事件中,我需要以某种方式调用javascript函数,然后更新地图。

我可以使用哪种解决方案?

由于

- 阿姆鲁

3 个答案:

答案 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代码周围自动添加开始和结束标签。