Atlas、MagicAjax这样的Ajax框架使用方便,但在使用一些控件,特别是第三方控件的时候 ,会出现一些问题,特别是一些脚本(JaveScript)的效果在重画的时候丢失了。主要原因是这些控件中混合了服务器端行为和客户端(javaScript)行为,Ajax框架虽然只是重画了局部页面,但是相关的事件模型是一样的,同样引发了Postback,这就意味着对于一些通过脚本改变效果的控件来说,Postback会重画控件本身,于是会回到上次Postback前状态,客户端脚本的效果就丢失了。
最简单的解决方法就是让客户端脚本引发Postback,这样页面的视图状态就会记住当前的状态,也就是脚本的执行结果。这和我们原来的观念有一些区别。一般地说,应该尽量减少不必要的Postback以改善用户体验,但在使用Ajax的情况下,Postback带来的只是一些小的性能损失,对用户而言却是基本感觉不到的。
但是对于一些更复杂的情况,比如,重画区域后客户端的html元素id发生了变化,而脚本由于在header区域而没有相应的更改,那么,新的事件就可能因为脚本错误而出现无法引发,目前的panel式的Ajax框架基本都不能很好的处理里面的tree控件,估计就是因为这个原因。