最近遇到一个奇怪的事情,在repeater中选择复选框后,翻到下一页(自己做的分页,我做的是页面回发,不是重定向),复选框状态保存,调试发现,不仅复选框如此,其中HiddenFiled隐藏域也是先前一个页面的值。再调试,发现Repeater在执行Onload,OnDataBind,OnItemBound之后,Repeater的绑定是正确的,然而在执行完OnItemBound之后,执行页面中的全选(按钮)事件中,Repeater中的值被还原成头一次的(我很纳闷的是,在OnItemBound 与页面全选(按钮)事件中是否发生其他事件?调试过程未发现。)。继续调试下去,发现在Repeater render阶段,对应的复选框和隐藏域已经变成先前的了。更让人费解的是,其他控件都没问题,如 Literal,LinkButton等,它们绑定的数据是新值。
    我不太确定是不是因为页面回发,保持状态引起的。请各位高手帮忙分析一下。
    第一个问题:Repeater的生命周期及其执行顺序
    第二个问题:Repeater 中嵌套的控件在什么阶段进行回发,即把对应ViewState中的值写回控件?

解决方案 »

  1.   

    只表述看不到问题所在,建议用aspnetpager,或者我写的一个无代码绑定分页的repeater  http://topic.csdn.net/u/20100519/18/0b761e98-1958-4883-8d5b-ef810b2b0ad1.html?23728
      

  2.   

    首先说aspnetpager并没有做到真正的分页,它仅仅是记录了当前页面状态而已,其分页过程和数据绑定,都需手工操作。
    我跟你一样也是封装了repeater控件,用作分页,我估计大家的这种思想应该原子Petshop的例子吧,不过petshop中的repeater分页相对简单,做的只是简单页面跳转。我想在这个层次上进一步提高,我改写了repeater模板,通过自定义模板列和XML文件配置,来达到简化代码,同时方便维护。
    我的问题其实很简单,就是要弄清楚Repeater生命周期的几个过程。你若封装过repeater,应该很了解,还请不吝赐教,谢谢。