最近主要帮一个团队测试和优化项目,可能是由于项目的参与大部分都是新手,对ajax不是很熟,而造成ajax控件滥用,本文主要总结我们最近遇到的一些问题,和大家共同探讨,希望不足支出,欢迎大家指出.也希望开发经验丰富的前辈多多指导.

  以下是我根据遇到的问题总结出来的两点心得:

1.     updatepanle 不同情况的两种使用方法 

   第一,直接用updatepanle<Triggers></Triggers>属性直接设置页面的相关控件的事件,该方法使用于简单使用updatepanle 或在同一个页面的同一个tab页。    

   第二,当在同一个页面存在多个tab页,并且不同的tab页的事件有所关联的时候,一般用在后台代码注册的方法比较适用。由于放在一个tab页的updatepanle可能无法识别或找到另一个tab页控件的触发事件,很容易导致出错,原因可能是你选的tab控件的类型所导致,我遇到过使用第三方的tab控件可以,但是使用微软或其他的第三方的tab控件却不行,虽然后者以后可能会解决这个问题,但为了你的程序能正常运行,使用代码注册不失为一个明智的选择。   比如你设计的一个页面有多个tab页,并且一个tab页里的某个控件的某个事件要触发另一个tab页的异步更新事件,那么最好用代码注册updatepanle的更新事件。    

   具体实现代码如下,也很简单:     首先在Page_LoadScriptManager1注册异步更新的触发控件        ScriptManager1.RegisterAsyncPostBackControl(btnAdd);    然后再btnAdd的某个触发事件里调用要更新的方法,  最后该事件执行后,调用更新区域的updatepanle执行update()方法即可。

2.     尽量减少在同一个页面(或tab页)里使用多个updatepanle控件

   Upatepanle 可以减轻页面和服务器的通信负担,但滥用反而会增加页面和服务器的通信负担,同一个页面使用过多的updatepanle将导致出现多次的通信,比如一个事件源触发多个更新事件。一般情况下,在同一页面的同一个tab页或table里只需要使用一个updatepanle就够了,即使是不需要更新的控件也可以放在同一个updatepanle里,只要不触发它的事件即可或者让其AutoPostBackfalse即可。

   自然如果由于业务的需要,特殊情况也要特殊对待。所以如果不是特别的业务需要,尽量让多个需要异步更新的控件放在同一个updatepanle里,统一异步更新,减少页面往返的通信次数。而至于统一异步更新,业务外观层(也就是页面层)可以借助table来解决,业务代码层(对应的页面后台代码)可以根据业务需求进行优化。

 

Posted on 2007-11-02 15:24 {:) 阅读(...) 评论(...) 编辑 收藏