首页 新闻 会员 周边

用户控件如何在POSTBACK后,保持自身的状态

0
悬赏园豆:20 [已解决问题] 解决于 2008-10-16 10:36

用户控件如何在POSTBACK后,保持自身的状态

我尝试用viewstate来保存,但是其中一些属性未被序列化,所以还是不能完全保存状态。

有没有其他方法,请详细告知,谢谢。。

 

问题补充: 可能是我原理没有搞懂,其实我要实现的效果是这样的 ASPX POSTBACK后 ASCX 将会重新加载,这时原来的ASCX会彻底消失。 我想要的效果就是保留原来的ASCX,不会因为POSTBACK而重新加载个ASCX。 如果上面的实现不了就得在ASPX中重新再赋给ASCX原来的值了,那么如何保存也是个问题。 我试过SESSION和CACHE都可以保存非序列化的类。VIEWSTATE不可以。还有没有其他方法。 如果可能的话,最好是实现第一种方式,让用户控件的状态一直保留。 请大家帮助,谢谢。 首先感谢第2个回答,我说一下为什么我使用不了VIEWSTATE 我在ASCX中定义了一个接口,然后在ASPX对方法进行了实现,而实现的类并没有序列化,所以保存进VIEWSTATE是会提示出错的。当然可以序列化实现的类,但是如果我在ASCX中使用了一些不能序列化的类,例如REPEATER类等内建的类,那么VIEWSTATE就不适用了
大门的主页 大门 | 初学一级 | 园豆:90
提问于:2008-10-14 14:34
< >
分享
最佳答案
0

POSTBACK后,保持自身的状态:

1.使用viewstate即可,不知道你为什么说不可以?

2.session,cache都没有必要!

Demo

public void page_load()

{

     if(!ispostback)

   {

       ViewState.add(XX,XX);

   }

}

public void button_click()

{

    object obj = viewstate["xxx"];

}

 

补充:这样也好解决,如果可以用Ajax,把控件放在updatePanel中,updateModel调整为自定义,这时在postback时,控件还是保持自身的状态的。

或者可以自己写一个CachePanel,用于保持控件自身的状态。

好像园子中有人写过CachePanel的。

RicoRui | 老鸟四级 |园豆:3663 | 2008-10-14 19:20
其他回答(3)
0

POSTBACK之后不要刷新页面就没问题了吧

页面初始化放到

   if (!Page.IsPostBack)
   {
   }

里面去

Birdshover | 园豆:352 (菜鸟二级) | 2008-10-14 17:46
0

先说一下:

---------------------------
ASPX POSTBACK后

ASCX 将会重新加载,这时原来的ASCX会彻底消失。
---------------------------

这段话有问题,ascx还是在控件树上的,怎么会消失呢,ascx的viewstate也会重新加载的,即使是动态加载也该如此的。

andy.wu | 园豆:225 (菜鸟二级) | 2008-10-15 11:17
0

试试把你ASCX中的类序列化[serializable]

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2008-10-15 13:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册