繁体   English   中英

无法关闭ViewState(asp.net/VS2010),有什么问题吗?

[英]can't turn off ViewState (asp.net/VS2010), what can be wrong?

我正在开发一个从数据库生成客户列表的应用程序。 我已经在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代码的地方,彼此分开

查看MSDN文档 ,即使禁用它,它仍可用于检测回发:

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

ASP.Net页同时具有“ 控制状态”和“查看状态”。 控制状态用于绝对关键的数据,而如果没有这些数据,控制就无法运行(至少在理论上如此)。

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

不幸的是,ASP.Net在如何区分两者方面是非常不一致的。 例如, DropDownList将不再在禁用视图状态的情况下触发更改事件。 我认为下拉菜单是一项至关重要的功能,我很乐意花一些字节空间将当前选定的值存储在“控制状态”中,以便可以检测到更改。

如果您想知道包含状态的隐藏字段的内容,可以对其进行解码 这对于检测视图状态“泄漏”可能非常有用。

您可以反序列化viewstate以查看谁在其中放置数据:

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

附加一个调试器,看看deserialized的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM