我们的 webapp 的登录页面会定期受到来自损坏的视图状态的错误事件的影响。为什么会发生这种情况并不重要——其中一些可能是破解脚本或其他什么。我被告知要消除这些错误。首先,我关闭了页面的视图状态。这仍然留下了一个简短的 __VIEWSTATE,它可能是“空的”但仍然有结构。这对防止错误没有任何好处。
然后我用无操作覆盖了页面的 SavePageStateToPersistenceMedium 和 LoadPageStateFromPersistenceMedium 方法。这消除了 __VIEWSTATE... 中的所有内容,但这仍然没有解决错误问题。隐藏字段仍然存在于页面中,如果您在回发之前对其设置了任何值,它仍然会产生异常“该页面的状态信息无效并且可能已损坏”。
错误由 ClientScriptManager.ValidateEvent 引发,它由 TextBox.LoadPostData 调用,如果我没有服务器端文本框,则由 HiddenField.LoadPostData 调用。我不明白为什么它认为它必须在页面级别停用并在保存/加载阶段中和时检查状态,但它坚持这样做。有什么我可以超载来防止这种无用的验证检查吗?
我的老板希望我让这个页面完全没有视图状态行为,因此它既不生成也不以任何方式响应任何形式的视图状态相关数据。他希望任何发布的数据都不可能触发任何与视图状态相关的代码。但是对于应用程序的其余部分,所有正常的验证都必须保留;更改仅适用于该单页。如何实现?
[更新] 另一件不起作用的事情是覆盖页面的 PageStatePersister 方法。我还尝试在页面的 Render 方法中阻止隐藏字段的输出,但是如果我将其添加回帖子,异常仍然会发生。
[更新] ...我认为我的老板现在愿意放弃实现这一目标。但如果有人想出答案,你当然会钦佩我。