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就是这么实现的,有兴趣的可以下载一个用用
内容版权声明:除非注明,否则皆为本站原创文章。