十分钟内学会:无刷新的页面间导航
2006-12-10 14:18 Cat Chen 阅读(7450) 评论(23) 编辑 收藏 举报Question
通过ASP.NET AJAX,我们能够实现页面内无刷新的异步回送。然而我们不可能将功能都放在一个页面里,这样设计非常不方便,动态加载控件的逻辑也复杂,所以还是要在多个页面间导航。可以让这种页面间的导航也无刷新吗?
Answer
要页面间导航当然要刷新,这是无法避免的,但我们总不能把原本属于多个页面的逻辑塞在一个页面里吧,所以要想个办法把这些逻辑分开来。这里用到一个小技巧,就是使用UserControl来作为基本的视图单位,而不使用Page,这样改变加载的UserControl也就改变了视图,相当于实现了导航,但Page没变所以还是可以无刷新。
然而怎么动态加载UserControl呢?Page.LoadControl?那个不是很麻烦吗?自己处理得不好又可能导致控件事件不触发之类的问题啊。所以我特意做好了一个可以动态加载UserControl的ViewPanel控件,大家直接拿它来用就行了。
这个控件只有一个属性需要关注,那就是ViewPanel.VirtualPath,你把UserControl的路径(例如"~/UserControls/Sample.ascx")设置给它之后它就会自动帮你加载该UserControl。在运行过程中,如果你修改了这个属性,控件自己会通过ViewState来保存该值,也就是一次修改永久有效,无论之后有多少次回送都没问题,直到你下一次再修改该值。
最好,要实现无刷新的视图间导航,你只需要在UpdatePanel中放置一个ViewPanel,之后不同的视图都使用UserControl设计(其实设计起来和使用Page时差不多),通过ViewPanel动态加载这些UserControl也就实现了无刷新的视图间导航了。
P.S.
这个方案社针对我的一个项目设计的,导航用的LinkButton都在UserControl外面,所以要改变ViewPanel.VirtualPath很容易。如果你的导航控件在UserControl内,那就需要Page.FindControl来找到ViewPanel然后再改变其VirtualPath值,这个比较麻烦。
我迟点会对此提供一个解决方案,应该就是一个ViewNavigationLink控件,使用起来如普通的LinkButton,它能自动寻找自己所在的ViewPanel并更改其VirtualPath属性。如果你期待更新的话,欢迎订阅Cat in dotNET。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构