如何从ASPX控件事件中调用Javascript函数?

Sha*_*ica 2 javascript asp.net

如何从ASPX控件事件中调用Javascript函数?

具体来说,我想从DropDownList的SelectedIndexChanged事件中调用该函数.

Joe*_*orn 14

每当我看到这样的问题时,我会有点紧张,因为十分之九意味着提问者并不真正理解发生了什么.

当您的SelectedIndexChanged事件在服务器上触发时,它将作为完整回发的一部分触发.这意味着要运行该代码,页面的其余部分加载代码也必须运行.

更重要的是,代码作为来自浏览器的新http请求的结果运行.就浏览器而言,结果中会返回一个全新的页面.旧页面和旧DOM将被丢弃.因此,当您的SelectedIndexChanged事件代码运行时,您要调用的javascript函数甚至不存在于浏览器中.

那又怎么办呢?你有几个选择:

  • 更改页面,以便控件根本不回发到服务器.在客户端以javascript完全检测更改.这是我的首选选项,因为它避免了浏览器页面中的奇怪的onload脚本,并且可以节省服务器的工作量.缺点是它使你的页面依赖于javascript,但这并不是什么大不了的事,因为如果javascript被禁用,这从一开始就注定要失败.
  • 使用ClientScript.SetStartupScript()设置所需的javascript以在SelectedIndexChanged事件中运行onload.
  • 将javascript的预期结果应用于页面的服务器模型.即使关闭了javascript(可访问性),这也具有工作的优势,但是以在服务器上做更多工作为代价,花费更多时间来推断页面的逻辑状态,并且可能需要复制客户端和服务器端逻辑.此外,此事件依赖于javascript:如果javascript被禁用,它将不会触发.
  • 第一个和第三个选项的某种组合也是可能的,这样它在本地使用javascript(如果可用),但如果没有,则回发到服务器.就个人而言,我希望看到更好,更直观,支持ASP.Net内置的内容.但同样:我在谈论一般情况.此特定事件需要javascript才能正常工作.