验证ViewState MAC失败并且Page.MaintainScrollPositionOnPostback

时间:2014-06-24 07:16:05

标签: asp.net postback viewstate

我知道至少有20个问题与“ViewState MAC验证失败”有关,但我的有点独特(至少我认为是这样)

在我的母版页的代码隐藏中引入此代码之前,我的网站工作正常。

protected override void OnInit(EventArgs e)
{
    Page.MaintainScrollPositionOnPostBack = true;
    base.OnInit(e);
}

这显然会在回发后将页面的一部分放入视图中。添加此代码后,我的网站开始通过单击调用以下JS代码的按钮向我提供“验证ViewState MAC失败”异常。

function SelectorSubmitOld(targetUrl) {
    var f = jQuery('form').get(0);

    jQuery("#__VIEWSTATE").remove();

    f.action = targetUrl;
    f.submit();
} 

一旦我评论用MasterPage代码隐藏编写的代码,一切都恢复正常。

以下我尝试过除了上面提到的(显然不是必需的)

  • 我的应用程序仅托管在一台服务器上
  • Machinekey出现在web.config中,删除/更改它并没有解决我的问题
  • 在web.config或页面级别设置EnableViewStateMAC = false并未解决我的问题

我的问题是,我无法理解我的代码和ViewStateMAC之间的关系是什么?

如果您需要我方提供更多信息,请与我们联系。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

ASP.NET Web窗体(.aspx)页面仅用于回发给自己,而不是回发到任何其他页面。在您的情况下,您通过更改< form action>将A.aspx发布到B.aspx。提交时的参数。

通过动态更改POST URL,您尝试完成的方案是什么?也许我们可以提出一个更好的方法来做到这一点。

答案 1 :(得分:0)

this post开始,我会尝试删除对回发位置的引用:

function SelectorSubmitOld(targetUrl) {
    var f = jQuery('form').get(0);

    jQuery("#__VIEWSTATE").remove();
    jQuery("#__SCROLLPOSITIONX").remove();
    jQuery("#__SCROLLPOSITIONY").remove();

    f.action = targetUrl;
    f.submit();
}