阿不

潜水

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在我之前的一篇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的新版本。有在使用的朋友可以关注一下。

posted on 2006-07-05 12:55  阿不  阅读(1967)  评论(1编辑  收藏  举报