【问题标题】:Invalid ViewState error after conversion from ASP.NET 1.1 to ASP.Net 3.5从 ASP.NET 1.1 转换到 ASP.Net 3.5 后出现无效的 ViewState 错误
【发布时间】:2015-03-27 00:30:16
【问题描述】:

[我在下面发布我们的问题和解决方案作为仅供参考。如果您有 Microsoft 或代表组织关于此问题的官方声明,我会将其标记为答案。否则,我下面的帖子将作为答案]。

问题:

我们采用了一个 ASP.NET 1.1 应用程序并将其转换为 ASP.Net 3.5。当我们双击页面上的某个项目,或选择该项目并单击“确定”按钮时 - 两者都会触发相同的回发功能 - 页面处理在服务器上停止并出现 Invalid ViewState 错误。

我们为调试所做的工作:这是针对驻留在公司 Intranet 上的程序。由于它是 .Net 1.1,该程序主要针对 Internet Explorer - JavaScript 不能在其他浏览器上运行。 F12 开发人员工具在 Internet Explorer 中打开 JavaScript 调试控制台。使用 Visual Studio 附加到 IIS 7.5 进程 (w3wp.exe) 允许我们查看 C# 服务器代码错误。

我们发现:网页上有一个隐藏字段,名为__EventValidation。基于使用 Visual Studio 检查服务器上的 C# 错误,我们看到 ASP.Net 正在获取该字段的值并将其解释为 ViewState 字段的值(ViewState 是包含有关页面信息的编码字符串),其中位于另一个隐藏字段中(我们可以使用 F12 开发人员工具在页面中看到这两个值)。但是 - 这些页面没有 ViewState 值 - 它在“EnableViewState = false”的代码中被特别禁用。

此页面的结构是一个包含 .aspx 的页面,除了一个包含子 url 的 iframe 之外没有其他数据,该子 url 显示带有数据的页面。

【问题讨论】:

  • 您的问题很可能已经结束。将其作为问题提出,删除解决方案部分,然后添加并接受它作为答案。也许你也可以在答案中加入序言。
  • @JonP,感谢您的提醒。我编辑了另一个类似结构的问题,并将我们的解决方案作为答案发布。我认为它可以帮助读者,因为这是一个相当深奥的错误。

标签: javascript c# asp.net


【解决方案1】:

[我将在最初的帖子中发布我们的问题和解决方案作为仅供参考。如果您有 Microsoft 或代表组织关于此问题的官方声明,我会将其标记为答案。否则,这篇文章将作为答案]。

解决办法:

我在 web.config 文件中设置了一个名为 enableEventValidation 的标志为 false,如下:

<pages enableEventValidation="false" viewStateEncryptionMode="Auto">

此标志在 1.x 框架中不可用。参考:https://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enableeventvalidation(v=vs.90).aspx

我原本以为这是在打开一个安全漏洞,但它只是在恢复 .Net 1.1 的行为。从上面的链接:“EnableEventValidation 属性指示是否应执行事件验证。默认值为 true。Web 应用程序可以选择禁用事件验证以恢复到 .NET Framework 1.0 版的行为。”

这恢复了原始功能。

这类似于广泛报道的 Invalid ViewState MAC 错误。但这是一个不同的错误。我最初在这里找到了 web.config 更新的解决方案:http://blogs.msdn.com/b/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx - 但我们没有设置 viewStateEncryptionMode="Never",而是将其设置为“Auto”,它仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2010-10-05
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多