在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦.
    因我们的项目不是简单的只要求"看起来像"没有刷新页面,其中一个主要的页面有那么一点点复杂,因页面中数据可以分成多块,有时只要更新某一块中的数据,有时候可能要更新好几块的数据.于是我用分块的思想来使用MagicAjax(AjaxZone),所以用起来有点变态 .因为程序偶尔会把IE弄死,又找不到原因,只是猜想可能因为事件太多IE处理不了卡死.于是我就更改以前的程序响应方式.
    以前程序是一块一块去取数据的,如果有多块数据要取,有时候要来回好几次,想想MagicAjax中的ViewState,我的页面中还有四个Gridview,你应该知道有多耗性能...我想把程序改成要多块数据时,不用来回多次,一次搞定--只有一个ViewState,于是把MagicAjax的源码改了一通.终于改得勉强可以满足需求了,却发现我的用户控件中有循环引用的问题.
    大概就是一种情况下,在用户控件A中发送请求,要求同时更新用户控件B中的数据,因此A要引用B,另一种情况下,在用户控件B中发送请求,同时要更新用户控件A中的数据,B又要引用A,于是恶梦就开始了.在MSDN中看了半天,网上搜了好久也没有找到好的办法,据我了解,循环引用是因为用Reference或Regist指令时在编译的时候会把控件引用进来,网上也有说可以用动态编译的方法避免,不过我们的项目最后是要发布的,不能用那个.
    最后笨筋一动,找到一个笨方法,在APP_CODE中创建了一个接口,用B继承接口,接口中提供A中要使用到的属性和方法.B还引用A,当A要使用的B的时候就把FindControl方法中找的控件转成接口来调用 .不知道有没有好点的办法,还望路过的达人不吝赐教.
posted on 2008-12-16 01:27  圣盗  阅读(609)  评论(0编辑  收藏  举报