在页面加载时提交表单时,viewstate MAC验证失败

时间:2011-01-14 12:46:14

标签: c# javascript asp.net viewstate

我有一个名为Redirect.aspx的示例页面,其中包含以下内容;

<body onload="document.forms.container.submit()">
    <form id="container" runat="server" method="post" name="container">
        <input type="hidden" value="<%=Request["APP_ID"]%>" name="APP_ID" />
    </form>
</body>

Page_Load方法如下:

protected void Page_Load(object sender, EventArgs e)
{            
    container.Action = Configuration.Instance.PageToRedirect;
}

对于此Redirect.aspx页面,我是从某个外部页面引导的。在请求上下文中,我有APP_ID密钥,它从此外部页面传递。接下来,我想使用POST将此APP_ID值传递给配置中定义的其他页面。不幸的是,我在重定向时遇到了这样的错误:

  

viewstate MAC验证失败。如果   此应用程序由Web托管   农场或集群,确保    配置指定   相同的validationKey和验证   算法。无法使用AutoGenerate   在群集中。

我不想禁用视图状态验证(<pages enableViewStateMac="false">),因为这不是我想要应用的“解决方案”。

此外我不明白为什么我会收到这样的错误。有人能帮我解决这个问题吗?还有其他方法可以在Page_Load事件中自动提交表单吗?

此致

2 个答案:

答案 0 :(得分:1)

2个想法:

  1. 检查&lt;%= Request [“APP_ID”]%&gt;的值得到实际计算,你不是将其作为字符串发布。你不能发布像“&lt;”这样的任何html标签字符或“&gt;”。如果未计算该值,则表示您没有对页面进行数据绑定。一个快速的解决方案是将this.DataBind()放在代码后面的文件中。

  2. 在web.config中手动生成MachineKey(您可以使用在线工具执行此操作:http://aspnetresources.com/tools/machineKey)。在我的一个应用程序中它解决了我的问题,即使我不在网络农场(现在我不记得问题的细节)。

  3. 另外请澄清一下: “接下来,我想使用POST将此APP_ID值传递给其他页面,该页面在配置中定义” 你确定当你进行重定向时会发生错误,或者是否在这篇文章中?您是否尝试将值过帐到另一个域中的另一个应用程序?这通常是不可能的。

答案 1 :(得分:0)

我认为,您可以使用以下命令编辑web.config中的页面标记:

<pages maxPageStateFieldLength="512">

也许,它可以解决你的问题......