日期:2014-05-17  浏览次数:20387 次

禁用viewstate后,ItemDataBound无效的问题,以及我现在奇怪的解决方法,大家来看看
大家新年好!
这两天公司放假,我在家里没事,想把以前做的一个网站的性能优化一下
于是乎禁用的viewstate,结果发现Repeater的ItemDataBound事件根本不执行。
在网上查了一下,答案都是不保存viewstate,是无法触发itemdatabound事件。

刚才,我偶然间把这个Repeater做进了用户控件(WEBUserControl)中,然后在主页面上调用,发现Repeater的itemdatabound事件居然有效了
即使在用户控件中设置单独关闭viewstate,似乎也没有什么影响
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UserControlFriendList.ascx.cs"
Inherits="ASCX_UserControl_UserControlFriendList" EnableViewState="false" %>

因为我对于.net运行机理也不是搞得太明白,大家都有遇到过这种情况吗?

------解决方案--------------------
启用ViewState
------解决方案--------------------
关键是看页面上有没有那么一段冗长的 _VIEWSTATE hedden标签不
------解决方案--------------------
如果你反编译Repeater控件,你会发现Repeater的好多属性都使用ViewState作为自身存储,你想一下,你禁用了ViewState后就会出现问题,在用户控件中你禁用的是用户控件的ViewState而不是Reapeter的ViewState,所以它在自身内部仍然可以使用ViewState作为自身的存储。
------解决方案--------------------
新建一个测试页面,拖入DataList并且配置好数据源机制,此时你会发现设置页面和DataList的EnableViewState属性为false都不会使得ItemDataBound失效。

如果你提问之前自己测试一下就好了,要知道csdn上回复问题时许多人也是不测试的,所以你如果先测试一下可以避免在问题中误导别人。

把你出问题的代码更清楚地说明一下吧!