1. updatepanle 不同情况的两种使用方法
第一,直接用updatepanle的Triggers/Triggers属性直接设置页面的相关控件的事件,该方法使用于简单使用updatepanle 或在同一个页面的同一个tab页。
第二,当在同一个页面存在多个tab页,并且不同的tab页的事件有所关联的时候,一般用在后台代码注册的方法比较适用。由于放在一个tab页的updatepanle可能无法识别或找到另一个tab页控件的触发事件,很容易导致出错,原因可能是你选的tab控件的类型所导致,我遇到过使用第三方的tab控件可以,但是使用微软或其他的第三方的tab控件却不行,虽然后者以后可能会解决这个问题,但为了你的程序能正常运行,使用代码注册不失为一个明智的选择。 比如你设计的一个页面有多个tab页,并且一个tab页里的某个控件的某个事件要触发另一个tab页的异步更新事件,那么最好用代码注册updatepanle的更新事件。
具体实现代码如下,也很简单: 首先在Page_Load向ScriptManager1注册异步更新的触发控件 ScriptManager1.RegisterAsyncPostBackControl(btnAdd); 然后再btnAdd的某个触发事件里调用要更新的方法, 最后该事件执行后,调用更新区域的updatepanle执行update方法即可。
2. 尽量减少在同一个页面(或tab页)里使用多个updatepanle控件
Upatepanle 可以减轻页面和服务器的通信负担,但滥用反而会增加页面和服务器的通信负担,同一个页面使用过多的updatepanle将导致出现多次的往通信,比如一个事件源触发多个更新事件。一般情况下,在同一页面的同一个tab页或table里只需要使用一个updatepanle就够了,即使是不需要更新的控件也可以放在同一个updatepanle里,和需要更新的控件放在一起,只要不触发它的事件即可或者让其AutoPostBack为false即可。
自然如果由于业务的需要,特殊情况也要特殊对待。所以如果不是特别的业务需要,尽量让多个需要异步更新的控件放在同一个updatepanle里,统一异步更新,减少页面往返的通信次数。而至于统一异步更新,业务外观层(也就是页面层)可以借助table来解决,业务代码层(对应的页面后台代码)可以根据业务需求进行。