如何在一个页面上完全消除__VIEWSTATE的所有用法?

时间:2016-04-07 17:31:25

标签: asp.net viewstate asp.net-4.6

我们的webapp的登录页面会定期遇到来自损坏的viewstate的错误事件。为什么会发生这种情况并不重要 - 有些可能是破解脚本或其他什么。我被告知要消除这些错误。首先,我关闭了页面的viewstate。这仍然留下了一个简短的__VIEWSTATE,可能已经“空”但仍然有结构。这对防止错误没有任何好处。

然后我用no-ops覆盖了页面的SavePageStateToPersistenceMedium和LoadPageStateFromPersistenceMedium方法。这消除了__VIEWSTATE中的所有内容......但仍然没有解决错误问题。隐藏字段仍然存在于页面中,如果在回发之前设置了任何值,它仍会产生异常,说“状态信息对于此页面无效并且可能已损坏。”

如果我没有服务器端文本框,则由TextBox.LoadPostData调用ClientScriptManager.ValidateEvent或HiddenField.LoadPostData引发错误。我不明白为什么它认为它必须检查状态,当它在页面级别被停用并在保存/加载阶段被中和时,但它坚持这样做。有什么我可以重载以防止这种无用的验证检查吗?

我的老板希望我让这个页面完全没有视图状态行为,因此它既不会生成也不会以任何形式响应任何形式的视图状态相关数据。他希望任何发布的数据都不可能触发任何与视图状态相关的代码。但是对于应用程序的其余部分,所有正常的验证必须保持不变;更改仅适用于此单个页面。如何实现这一目标?

[update]另一个不起作用的是覆盖页面的PageStatePersister方法。我也尝试阻止在页面的Render方法中输出隐藏字段,但如果我将其添加回帖子,则仍然会发生异常。

[更新] ......我想我的老板现在愿意放弃完成这个。但如果有人想出答案,你肯定会有我的钦佩。

1 个答案:

答案 0 :(得分:0)

您正在查看恰好保存在Control State html字段中的viewstate

控制状态用于存储寻呼机信息: https://msdn.microsoft.com/en-us/library/1whwt1k7.aspx

对其进行解码以查看: How to decode viewstate