您的位置:首页 > Web前端 > JavaScript

javascript里通过脚本触发UpdatePanel的刷新

2010-12-24 16:16 288 查看
最近需要用到这么个功能,网上找了找,方法不少,挑了一种最简单的记录下来:

首先,UpdatePanel里要声明一下OnLoad方法,如下:

<asp:UpdatePanelID="UpdatePanel1"runat="server"OnLoad="UpdatePanel1_Load"> <ContentTemplate> ... </ContentTemplate> </asp:UpdatePanel>

接着,在你需要触发UpdatePanel的时候通过如下方法

__doPostBack('<%=UpdatePanel1.ClientID%>','');

我是在ajax里面调用的,页面文档操作完成后调用他

$.ajax({ type:"GET", url:"UserRelationAjaxCall.aspx", dataType:"text", data:"Type=UserGroup&RelationID="+relationId+"&UserGroupStr="+passStr.trim(), success:function(msg){ groupsArray=msg.decodeURIComponent().split('|'); generateGroups(); $('#no_group').hide() //Aysnrefreshlistpanel __doPostBack('<%=UpdatePanel1.ClientID%>',''); }, error:function(msg){ alert("Error"); } });
这样就是先局部刷新了.
再补充点知识:
开发人员常遇到的三种ajax问题:
1.页面在局部postback时还是触发刷新了
2.没有更新时updatepanel居然触发更新了
3.Load事件完成后控件的事件被触发

1.页面在局部postback时还是触发刷新了:
很多开发人员不清楚的是,在局部postback中,页面的所有生命周期中的事件全部会触发,在页面局部回发过程中,页面的控件树会被重新建立并且每个控件都会执行其生命周期的事件,
在局部回发中,Page.IsPostBackistrue.但是ScriptManager.IsInAsyncPostBackistrue仅仅在局部回发中

2.每次UpdatePanel都会跟着更新
尽量使用UpdatePanel的生命周期事件,像Init,Load,PreRender,Unload,这样可以清楚的区分和更安全的使用__doPostBack,如果不想每次都调用,就在调用之前判断下:protectedvoidUpdatePanel1_PreRender(objectsender,EventArgse) { //Thiscodewillonlybeexecutedifthepartialpostback //wasraisedbya__doPostBack('UpdatePanel1','') if(Request["__EVENTTARGET"]==UpdatePanel1.ClientID) { //Insertmagichere. } }
总结下,几点注意:
Page_Load每次都会执行,在这一点上,局部刷新和全页刷新没有区别
通过对_doPostBack,__EVENTTARGET一起使用可以将刷新先定于特定目标(通常是子panel)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: