最近需要用到这么个功能, 网上找了找, 方法不少, 挑了一种最简单的记录下来:
首先, UpdatePanel里要声明一下OnLoad方法, 如下:
1 2 3 4 5 | <asp:UpdatePanel ID= "UpdatePanel1" runat= "server" OnLoad= "UpdatePanel1_Load" > <ContentTemplate> ... </ContentTemplate> </asp:UpdatePanel> |
接着,在你需要触发UpdatePanel的时候通过如下方法
__doPostBack('<%= UpdatePanel1.ClientID %>', '');
我是在ajax里面调用的, 页面文档操作完成后调用他
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $.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() //Aysn refresh list panel __doPostBack( '<%= UpdatePanel1.ClientID %>' , '' ); }, error: function (msg){ alert( "Error" ); } }); |
这样就是先局部刷新了.
再补充点知识:
开发人员常遇到的三种ajax问题:
1 .页面在局部postback时还是触发刷新了
2 .没有更新时updatepanel居然触发更新了
3 .Load事件完成后控件的事件被触发
1.页面在局部postback时还是触发刷新了:
很多开发人员不清楚的是,在局部postback中, 页面的所有生命周期中的事件全部会触发, 在页面局部回发过程中,页面的控件树会被重新建立并且每个控件都会执行其生命周期的事件,
在局部回发中, Page.IsPostBack is true . 但是ScriptManager.IsInAsyncPostBack is true 仅仅在局部回发中
2.每次UpdatePanel都会跟着更新
尽量使用UpdatePanel的生命周期事件, 像Init, Load, PreRender, Unload, 这样可以清楚的区分和更安全的使用__doPostBack, 如果不想每次都调用, 就在调用之前判断下:
1 2 3 4 5 6 7 8 9 | protected void UpdatePanel1_PreRender( object sender, EventArgs e) { // This code will only be executed if the partial postback // was raised by a __doPostBack('UpdatePanel1', '') if (Request[ "__EVENTTARGET" ] == UpdatePanel1.ClientID) { // Insert magic here. } } |
总结下,几点注意:
Page_Load每次都会执行, 在这一点上, 局部刷新和全页刷新没有区别
通过对_doPostBack, __EVENTTARGET 一起使用可以将刷新先定于特定目标(通常是子panel)
1 | |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了