【问题标题】:can't turn off ViewState (asp.net/VS2010), what can be wrong?无法关闭 ViewState (asp.net/VS2010),有什么问题?
【发布时间】:2012-02-23 22:16:44
【问题描述】:

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

【问题讨论】:

  • 你究竟是如何禁用视图状态的
  • 在页面中。尝试使用 ViewStateMode="Disabled" 和 EnableViewState="False"

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


【解决方案1】:

ASP.Net 页面同时具有Control State 和视图状态。控制状态适用于控制在没有(至少在理论上)无法运行的绝对关键数据。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 好吧,这对我来说是全新的,我必须说我觉得有点奇怪。尤其是在这种情况下,当它包含大量代码行时,即使我明确要求 VS 禁用它。 ://
    • 另见此问题进一步解释:stackoverflow.com/questions/283082/…
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2016-07-07
      相关资源
      最近更新 更多