UpdatePanel控件,你真的会用了吗?

    刚接触这控件的时候,感觉这东西好神奇,把页面中的东西放进去就能实现异步刷新,其它的什么都不用做。我就这样一直用了一段时间,最近才发现UpdatePanel控件并不是个简单的东东,我想肯定还有像我这样把UpdatePanel放进去后就什么都不管的人,希望我的贴对大家有些帮助。希望各位多多支持,如有错漏,请不吝指正。

    UpdatePanel控件(以下简写为up)有个属性:UpdateMode 可取值 AlwaysConditional ,默认是 Always ,总是进行自动更新,这对服务端是有性能损耗的,我们应尽量使用 Conditional 值,然后在服务端代码手动调用Update()方法来更新
这里又要牵涉到另一个属性:ChildrenAsTriggers 可选 true(默认) 和false,这个属性的作用是:当up内的控件发生事件(如Click)时,是否自动更新此up的内容,如果选True,则更新,选False则不更新,但可在事件代码中调用Update()方法手动更新,如Up1.Update();

  这种设定可用于有两个或多个up的情况,比如up1中放的全是按钮,像添加、删除、修改等,up2中放的是gridView等内容显示控件,up1中的按钮btn1调用up2.Update()方法更新up2,如果ChildrenAsTriggers设置为True,则up1也进行了更新,这是没有必要的,浪费服务器资源,所以我们要将up1的ChildrenAsTriggers设为False,禁止自动更新。
其实将按钮放在up1中,只是要让这些按钮变成异步回转按钮,如果你只有一个按钮,单独放在一个up中,显然没有必要,那该如何做呢?有两个方法:
1、在页面的page_load方法中注册, 如:ScriptManager1.RegisterAsyncPostBackControl(btn1);要特别注意的是,不用放在if(!IsPostBack){}中,否则无效。
2、使用up控件的Triggers属性,如下图所示,点添加按钮右边的小三角选择AsyncPostBackTrigger,然后在ControlID中选择要进行异步回传的控件,EventName中选择此按钮中的哪个事件进行异步回传,图中我选的是Click,这样一来我将按钮放在up外面,点击一样能进行异步更新。这样设定后就不需要手动调用Update()方法了,方法1是需要的。

你会发现小三角下有两个选项,那第二个是用来做什么的呢?PostBack,当然是页面回传了,如果把上一步中的按钮设为PostBack,那点按钮就不会是局部更新,而是整页回送了。这个其实也是很有用的,很多人都知道up的异步更新不支持FielUpload控件,我那时候做程序是把FileUpload放在up外的,可是这样会影响页面整体布局,现在终于知道怎么做了。我还是截张图吧:
我把FileUpload放在up中,点上传按钮就能上传图片了

一般情况下,我们应将用于显示数据的东西才放到up中,如gridview等。并且尽量使用手动更新模式,这样才能让程序执行起来顺畅而高效,当然了,如果页面很简单的话就没并要搞这么复杂,全部默认就行了。今天就到这,欢迎指正批评。
我也是看了《ASP.NET AjAX经典范例168(附光盘VC#版)章立民》这本书才知道这些的,这书非常不错,建议大家买一本。

posted @ 2008-01-04 22:17  缤纷夏日  阅读(5275)  评论(10编辑  收藏  举报