应用Atlas后,页面输出JS脚本的时机

应用Atlas后,页面输出JS脚本的时机

左直拳

我写了个用户控件,里面包含了一些JS脚本。

在页面调用的时候,默认是隐藏的(Visible=”false”),直到用户触发了某事件,才将此控件弹出来(Visible=”true”)

同时页面上也用了Atlas。那个用户控件被UpdatePanel包围着,这样子它隐藏或显示的时候,页面就不会刷新了,追求一种行云流水,波澜不惊的效果。

可是月亮下去了,毛病出来了。

发觉控件中的JS函数、事件都失效了,比如,点一个按牛(其onclick=”GetInfo()”),竟然提示脚本错误:找不到对象。

控件中明明是有该方法的。

据说UpdatePanel的原理是将整个页面提交,数据处理完后回传,然后有选择性地进行局部更新。古怪的是,听说它将页面中所有的JS都放在了一起。这样有时侯会造成一些问题,比如注释语句<!--会将别的函数也注释掉了。

不过我估计不是这个问题。因为一个控件如果在服务器代码中定义为Visible=false,则在页面装载时,其实并没有输出。而在页面运行期间,由AJAX来控制回传刷新,这时候再让控件visible=true,那么输出的控件上的JS是没有注册的,当然是找不到了,在浏览器查看页面的源文件也看不到这些JS脚本的踪影。比如,如果应用了AJAX,又想使用类似“Response.Write(“<javascript>alert(‘Hello World!’);</javascript>”)”的方法,通常都不可以。如果要用的话,听说用RegisterClientScriptBlock注册一下才行,但也有人说不行,我没有试,姑妄听之。

猜想到了原因,要解决问题就不难。不将控件的Visible=false,而是在控件里,用一个<panel>将控件显示内容包围起来,而JS不在范围内,默认panel.Visible=false,这样就既可输出了控件(特别是上面的脚本),又起到隐藏的作用,真是护发去头皮,两全其美。如果要想控制该控件的显隐,很简单,设置一个属性来控制panel.Visible就可以了。

问题解决。

 
原文地址:https://www.cnblogs.com/leftfist/p/4258328.html