在我之前的一篇POST中(无刷新“页面跳转”),曾提出一种B/S程序全部无刷新操作的解决方案。它的基本思想就是在UpdatePanel动态加载User Control。也得到了大家的广泛关注,但是很多朋友也担心会出现很多这样那样意想不到的问题,主要是UpdatePanel的兼容性问题。但到目前为止,我在实践过程中,除与部分第三控件(ComponentArt.Web.UI)的兼容问题无法协调外,其它大部分问题都可以得到很好的解决。今天记录一下与AtlasToolKit同时使用时出现的问题以及解决办法。
AtlasToolKit是一个基于Atlas扩展的控件工具开发包,使用简单方便,但是目前也存在一些问题,甚至有朋友建议还是先别用这组ToolKit,但是使用它实在是太方便了,在不产生(或少产生)其它负面影响的场合下,我还是用了。但是也出现了一些问题,记录一下,希望给以后出现同样问题的朋友们提供一些帮助。
问题描述:
我是在用户控件中使用AtlasToolKit的,而用户控件也是通过动态加载到页面的。这样使用的后果就会产生一个错误提示:
Assertion Failed: Unrecognized tag atlascontroltoolkit:collapsiblePanelBehavior
Break into debugger?
出现这个错误的原因是因为没有注册所需的javascript脚本文件。因为在每个Extender都有一段Atrribute声明如下:
[ClientScriptResource("atlascontroltoolkit", "collapsiblePanelBehavior", typeof(AtlasControlToolkit.CollapsiblePanelExtender),
"CollapsiblePanel.CollapsiblePanelBehavior.js")]
那么在页面中,是由ScriptManager来在初始化的时候判断要加载哪些脚本文件的,由于我们的用户控件是晚于页面的ScriptManager初始化的,所以在用户控件引入的AtlasToolKit控件所需要js脚就不会被下载并注册了,AtlasToolKit控件也就无法被使用了。
解决办法:
了解了问题内在缘由,就好办了。它的解决办法就是在页面上引用将可能用到空AtlasToolKit元素,让它能被ScriptManager解析下载并注册,如:
<atlasToolKit:CollapsiblePanelExtender runat="server"></atlasToolKit:CollapsiblePanelExtender>
这样就保证了atlasToolKit:CollapsiblePanelExtender在动态的用户控件能被正常使用了,对于其它的控件也是一样的。
影响:
这样做的一个负面影响就是加长了页面的加载时间了,因为不管在第一个加载的用户控件是否使用到了相应的AtlasToolKit都必须下载它的支持脚本,一定程度上会造成浪费。但是一般情况下,每个ToolKit的支持脚本都还比较小,最大的28K,而且页面也是只加载一次的,还有本身atlas的脚本文件也会客户端缓存。但是有一种最坏的情况是当我们使用了所有的ToolKit的话,那体积还是相当可观的。一种最好的结果是,在未来的版本中AtlasToolKit本身就解决这个问题。
BTW:AtlasToolKit本周将会发布一个基于June CTP atlas的新版本。有在使用的朋友可以关注一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述