UpdatePanel触发javascript脚本的方法附代码(2)



Button1.Attributes["onmouseover"] = "alert('hello')"; 
  2.在呈现过程中脚本初始化

  第一种方法简单运用还可以,复杂就不行了,我们还是需要把脚本封装好跟控件结合使用的,我们不再在预呈现中注册脚本,而在呈现中实现(即RederContent方法).
我们只要保证脚本资源在前,初始化在后,控件在中间这一原则就可以了...以下方法是可行的

如下
protected override void RenderContents(HtmlTextWriter output)
{
output.Write("<script src=\"xxxx.js\"></script>"); 
output.Write(Text); 
output.Write("<script>alert('hello')</script>"); 
}
  四.几个误区

  1.验证控件在ajax框架中可以完好使用
其实是其加载了一段脚本,不然其也会挂掉
  2.状态保留
  在UpdatePanel中更新数据后,再Postback,无刷新更新的数据状态还保留
  3.更新数据后执行客户端脚本

曾经我们天真的会这么写

protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "alert('hello')"; 
}
  结果什么也没发生,window.onload事件已过,除非你刷新(可你不想刷新),不然没人帮你触发。
  谁来触发?微软帮我们准备好了。你要的大概就是这个了,数据更新前后都是一个事件触发。我们可以围绕着这两个事件为控件做点事情。这个状态适合于数据取到后就立马触发的需要。
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
 function BeginRequestHandler(sender, args)
 {
 var elem = args.get_postBackElement(); 
 ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing'); 
 }
 function EndRequestHandler(sender, args)
 {
 ActivateAlertDiv('hidden', 'AlertDiv', ''); 
 }
 function ActivateAlertDiv(visstring, elem, msg)
 {
 var adiv = $get(elem); 
 adiv.style.visibility = visstring; 
 adiv.innerHTML = msg; 
 }
  其他的话我们也可以更改控件属性,就如加个onclick事件什么的都可以

  五.另类解决方法

此方法比较的绝,但用起来比较的爽。UpdatePanel之所以无法获取到脚本数据,是因为其获取范围还不够。。。接着的想法是:

  照样无刷新取数据,但取回来的数据跟Postback回来的数据一样。
可能有人说会比较耗性能,那都是相对的。不过也是一个很好的想法。Telerik公司的RadAjaxPanel就是这么实现的,有兴趣的可以下载一个用用 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2456.html