Posted on 2006-05-23 18:18
随心所欲 阅读(1493)
评论(3) 编辑 收藏 网摘 所属分类:
AJAX : Atlas
准确的说,在UpdatePanel中动态加载含有AtlasControlToolkit的控件/页面时,要谨慎。
这应该是现在这个版本的Atlas的一个bug。
UpdatePanel在更新时,全页回发(因为asp.net的页面只有一个Form),然后操作完成之后,只把指定的UpdatePanel的html更新,并没有更新整个页面。所以在这个过程中,任何针对整个页面的操作都得谨慎。
一个例子就是在updatePanel完成时触发一个js,这个就不能直接Reposne.Write(js)来完成。这个还有些其他方法可以解决,但是如果需要在页面注册一个服务的引用的话,问题就来了。
这是一个使用CollapsiblePanelExtender的例子。在运行之后,可以在页面源代码中找到这样的注册语句
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005" xmlns:atlascontrolextender="atlascontrolextender" xmlns:atlascontroltoolkit="atlascontroltoolkit">
<references>
<add src="/SimpleFramework3/WebResource.axd?d=Ioi8xHST7lcO8WyMX8M1Qp01HVRZOqaHXtXlrWnSa8qBoUOooDu5bAELmzds1wN-b1-u5YUN4fWuliZSecml92eFfFLwwy_8K5S-adm8Yz5yBfnq0SF1wAuzr77-pr4C0&t=632799165960000000" />
<add src="/SimpleFramework3/WebResource.axd?d=89z_PdkPvsat7v7eSPM89jZhS5cY0rlRtRNdcXFnl0gOfvpgs0I0GXKI0W5-Ll_TF2sqQzl3lxlywA9AMVtb9WDixdmjxbG3tn4nNwGkqBo1&amp;t=632823506800000000" />
<add src="/SimpleFramework3/WebResource.axd?d=8FjwyPB6e4Kf9s7i1G28KofGaKHx4MhV4uNL3IS6wh5HuMaN0lgm8TlIE4nHVnIDKm-cpHtwfXqX-avK1ifzy2khSmUR5wx-qmL1K8n7jRDsqfSIaqrGCeTCtCDelEJW0&amp;t=632830263573107152" />
</references>在这样的情况下,toolkit运行时没有问题的。
但是如果你这样使用就会出现问题:在页面上的一个UpdatePanle里面放置一个按钮,然后再其处理事件里面执行一个加载带有ToolKit控件应用的ascx页面到本页的另外一个UpdatePanel里面。然后运行一下,看看,一定会出错。
出错的提示大致是这样的“找不到控件xx命名空间的引用”。
在这个例子里面,如果我们提前先加上一个CollapsiblePanelExtender在页面上(放置按钮的aspx页面),那么就不会出现这个错误了。(遗憾的是,会持另外一个错误:只有一个控件可用。每次刷新之后的结果不一样。这一个,问题就更加严重了,这说明了atlas现在还是有很多问题存在的。)
出错的原因是这样的:
1:页面第一次加载(页面上没有toolKit控件,所以,这时叶面上没有注册引用)
2:按钮代码执行加载,页面无法判断要加载的ascx控件里面有Toolkit,所以,页面上依然没有注册
3:加载ascx,结果展示给用户。但是ascx上的控件需要注册,而页面上却没有,所以,atals的runtime运行出现异常。
解决的办法,现在有一个比较下X的,就是在要进行加载带有toolkit的控件之前,先在叶面上放置几个假的注册应用。
如此有关的是,atals在处理页面上的js函数的时候也是很有特点的:他把所有的js都放到一个block里面。
这样做的后果之一就是这些js可能会互相“干扰”,平时写的一些js可能在这里无法运行。因为有的js的<!--注释可能会把你的js注释掉。这也是我在开发过程中遇到的一个问题。
希望下一个版本会好起来。