无法关闭ViewState(asp.net/VS2010),有什么不对?

时间:2012-02-23 22:16:44

标签: asp.net visual-studio-2010 viewstate

我正在开发一个从db生成客户列表的应用程序。我在default.aspx中禁用了ViewState,但现在当我查看生成的HTML页面的源代码时,我看到ViewState已打开。

我试图添加ViewStateMode =“Disabled”和EnableViewState =“False”(单独甚至一起),但没有任何运气。

有什么不对?

源代码中的ViewState代码如果有帮助:

<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="88luWaDvrTt0+OWLhB and a lots of characters after this...

编辑:现在,当我再次查看源代码时,我可以看到以下内容,我觉得很奇怪:

  • 有很多ViewState字符(需要15-20秒才能滚动它)
  • ViewState代码有两个地方,彼此分开

3 个答案:

答案 0 :(得分:2)

查看the MSDN documentation,即使禁用它,它仍然用于检测回发:

  

即使 EnableViewState false ,该页面也可能包含隐藏视图   ASP.NET用于检测回发的状态字段。

答案 1 :(得分:2)

ASP.Net页面同时包含Control State和View State。控制状态是绝对关键的数据,控制在没有(至少理论上)的情况下无法运行。

视图状态和控制状态都存储在同一个字段中。视图状态完全禁用的站点可能仍具有控制状态。

不幸的是,ASP.Net在如何区分两者方面存在很大的不一致。例如,DropDownList将不再触发已禁用“视图状态”的更改事件。我认为这是下拉的关键功能,我很乐意花费几个字节的空间来存储控制状态中当前选择的值,以便可以检测到更改。

如果您想知道隐藏字段包含状态的内容,您可以decode it。它对于检测视图状态“泄漏”非常有用。

答案 2 :(得分:1)

您可以反序列化视图状态,以查看谁将数据放入其中:

LosFormatter lf = new LosFormatter();
object deserialized = lf.Deserialize("!!! YOUR VIEWSTATE HERE !!!");

附加调试器并查看deserialized

的内容