论坛首页 编程语言技术论坛

关于Skined Web Control中childcontrols的添加顺序问题

浏览 2551 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-16  
昨天晚上突然碰到一个很莫名其妙的bug,具体描述如下。
    由于我要三个order report页面,但是三个页面中order的显示处理是完全一摸一样的。
    于是我想到了用asp.net的skined Web Control把一样的html内容抽出到服务器端标记中,这样三个页面就可以引用同一个服务器端标记,如果改显示格式修改的话,只要修一个一个ascx文件即可,不要修改三个aspx页面,可以较好的符合DRY原则。
    就在我觉得大功告成可以休息的时候,突然发现当查询条件改变的时候,Skined Web Control中显示内容的记录数变了,但是显示的内容居然是上一次查询的结果。
    自己调试,用google搜索,折腾将近3个小时未果,于是试图把放在ascx页面的repeater中的<%# Eval %>表达式替换为<asp:label>,奇迹发生了,居然就可以正确的显示查询结果了,于是由此我得出了一个结论:用LoadControl方法会导致ascx页面中的Repeater的<%# Eval %>绑定失效。
    本打算就此结束了,可是这个时候我发现网络上有篇老外的文章中也是利用和我一样的做法来定制ascx控件,他也用到了repeater和Eval但是,好像没有提到说又这样的问题,于是我对照的他的代码和我自己的代码,发现唯一不一样的地方如下
    老外的代码:
   
            
           cusControl = LoadControl();
            Controls.Add(cusControl);
            InitializeControl(cusControl);

    我的代码:
           
           cusControl = LoadControl();
            InitializeControl(cusControl);
            Controls.Add(cusControl);       

     最后两句的顺序不一样而已,于是就想难道一个顺序的差别又这么大?抱着死马当活马医的心理,我尝试了修改成老外的做法,编译、运行。漫长的等待后,奇迹居然发生了,Eval生效了,折腾了3个多小时的问题居然这么简单就能解决。强烈的鄙视一下自己啊。
      不过现在的问题就是不知道为什么顺序不一样会导致这样的bug呢,请哪个知道的兄弟给个说法,谢谢了!!!!!!
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics