zoukankan      html  css  js  c++  java
  • ViewState、UpdatePanel及控件OnPre之间的纠葛

        ViewStateAJAX UpdatePanel一起使用,在一些情况下,貌似会引起整页回发,让人觉得UpdatePanel失效了。

     

        这是在解决另一问题时,发现的。

       

        这个问题是这样的:

        对页面上的一个Panel添加了OnPre事件,这个Panel是放在UpdatePanel里的。或许也与TabContainer有关,实际上,是这样放的:UpdatePanel里放TabContainerTabContainer里的每一个Tab里放的Panel

    只有当使用ViewState来判断是否让这个Panel显示(用的是Panel.Visible),才正常,每次操作,都会触发OnPre事件。而用其他方式,只有第一次加载页面,或整页回发时,才触发这个事件。

    事实上,我注意到,使用ViewState时,任何操作都会引起整页回发,这不是我们预期的效果。我们是加了UpdatePanel的。还好,虽然出现这个问题,但OnPre事件是正常的。

    然而,当不用ViewState时,UpdatePanel倒是正常了,不会整页回发,但OnPre事件不正常了。

     

     

    重点:原因!!

     

    谜底揭晓:因为在UpdatePanel中,如果你要让某个控件的VisibleFalse(使用OnPre事件),那么,它再也不会出现了。

    第一次这个控件的VisibleFalse,那么,它再也不会出现了(再不也不会触发OnPre,除非整页回发)。如果第一次这个控件的VisibleTrue,则OnPre会正常被触发,但,如果下一次,Visible被置为了False,则它再也不会被显示,其OnPre事件不会被触发。

     

    要解决这个问题,有个方法:

     

    避免在位于UpdatePanel里的控件使用Visible,改为使用“Display:none;”

     

    比如这样:

    Panel.Attribes.Add(“Style”,”Display:none;”);

     

    如果要显示出来,就这样:

    Panel.Attribes.Remove(“Style”);

     

        

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/meta/p/1797179.html
Copyright © 2011-2022 走看看