1

我得到了臭名昭著的错误

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

经过广泛的搜索,我找不到任何可以解决我的特定问题的东西。我在 .NET 4 中使用 URL 路由,但我没有使用 MVC。我发现的所有类似的问题/解决方案(由于 URL 路由)都在 MVC 中提供了解决方案,但在常规 ASP.NET Web 窗体中却没有。

这里的堆栈溢出问题指出:

它似乎与url中的子路径数有关。如果至少有 2 个子路径,则视图状态验证失败。

在测试这个理论时,我能够提供一个快速而肮脏的解决方法,只需将我的路线从

Module/Search/Results

Module/SearchResults

这暂时解决了这个问题,但是,该帖子中的任何答案都没有帮助。

我发现了一些有趣的东西,该错误可以在 IE9 中重现,但不能在 Chrome 24.0.1313.52m 中重现。这让我相信这个错误是特定于浏览器的,所以我尝试为我的网站设置 NoCache,但无济于事,Chrome 仍然有效,IE9 仍然抛出 ViewState 错误。

为了重现该问题,以下是我的环境的一些关键因素:

Windows 7 64-bit
IIS 6.1 SP 1
Local Web Project (VS 2010)
Nested Master Pages (3 levels)
URL Routing (defined in Global.asax)
Page contains a GridView with a TemplateField.  
GridView has PagerSettings defined.
Links causing the error are within the TemplateField.
Links outside of the GridView do not cause the error.

重现步骤如下:

User browses to page "~/Module/Search/Results" (from link or directly doesn't matter)
User clicks on a button that posts back and causes a redirect to another page "~/Module/DoSomething"
User presses the Back button in the browser which takes them back to "~/Module/Search/Results"
User then proceeds to press a button that causes a post-back which immediately causes the error.

更新: 在有关页面布局的关键因素中添加了信息。

如何为所有浏览器解决此问题,以便我可以在网页的 URL 中有 2 个或更多子路径,而不会在用户返回页面然后生成另一个回发时导致错误?

4

1 回答 1

0

我想到了!

在尝试解决出现错误的问题时

Microsoft JScript 运行时错误:“WebForm_FireDefaultButton”未定义

我发现一篇文章说我需要将以下内容添加到路由表的顶部

routes.Ignore("{resource}.axd/{*pathInfo}");

这似乎已经解决了我正在寻找的问题和这个问题中的问题。

于 2013-01-25T16:42:22.053 回答