我正在开发一个从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...
编辑:现在,当我再次查看源代码时,我可以看到以下内容,我觉得很奇怪:
答案 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