1

actionform标签中设置并收到以下错误:

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。

我尝试了以下事情:

  1. 在 web.config 中设置机器配置键。
  2. 在页面中设置 EnableViewStateMac="false"
  3. 设置 ViewStateEncryptionMode="从不"
  4. 设置 EnableEventValidation="false"

但没有运气。

请提供任何指导。

感谢您的帮助和分享。

编辑:

这是我的页面的标记。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
EnableViewStateMac="false" ViewStateEncryptionMode="Never" EnableEventValidation="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="aspnetForm" method="post" action="Test.aspx" runat="server">
    <div>
        <asp:TextBox runat="server" ID="txt1"></asp:TextBox><br />
        <asp:TextBox runat="server" ID="txt2"></asp:TextBox><br />
        <asp:Button runat="server" ID="btn" Text="Click" />
    </div>
    </form>
</body>
</html>
4

4 回答 4

4

如果更改按钮的表单标签和标记,则可以完成跨页发布。

脚步:

  • 从表单中删除“操作”
  • 将“PostbackUrl”添加到按钮

==================================================== =======

MSDN:ASP.NET 中的跨页发布

概述: http: //msdn.microsoft.com/en-us/library/ms178139 (v=vs.100).aspx

操作方法:http: //msdn.microsoft.com/en-us/library/ms178140 (v=vs.100).aspx

==================================================== =======

<form id="aspnetForm" method="post" runat="server">
<div>
    <asp:TextBox runat="server" ID="txt1"></asp:TextBox><br />
    <asp:TextBox runat="server" ID="txt2"></asp:TextBox><br />
    <asp:Button runat="server" ID="btn" Text="Click" PostBackUrl="~/Test.aspx" />
</div>
</form>

于 2012-10-11T04:27:05.153 回答
1

我建议您覆盖页面的渲染事件,将加密视图状态和事件验证的隐藏字段放置在表单顶部。这将确保在任何可以提交表单的内容之前写出这些内容。

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
  System.IO.StringWriter stringWriter = 
      new System.IO.StringWriter();
  HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
  base.Render(htmlWriter);
  string html = stringWriter.ToString();
  string[] aspnet_formelems = new string[5];
  aspnet_formelems[0] = "__EVENTTARGET";
  aspnet_formelems[1] = "__EVENTARGUMENT";
  aspnet_formelems[2] = "__VIEWSTATE";
  aspnet_formelems[3] = "__EVENTVALIDATION";
  aspnet_formelems[4] = "__VIEWSTATEENCRYPTED";
  foreach (string elem in aspnet_formelems)
  {
    //Response.Write("input type=""hidden"" name=""" & abc.ToString & """")
    int StartPoint = html.IndexOf("<input type=\"hidden\" name=\"" + 
      elem.ToString() + "\"");
    if (StartPoint >= 0)
    {
      //does __VIEWSTATE exist?
      int EndPoint = html.IndexOf("/>", StartPoint) + 2;
      string ViewStateInput = html.Substring(StartPoint, 
        EndPoint - StartPoint);
      html = html.Remove(StartPoint, EndPoint - StartPoint);
      int FormStart = html.IndexOf("<form");
      int EndForm = html.IndexOf(">", FormStart) + 1;
      if (EndForm >= 0)
        html = html.Insert(EndForm, ViewStateInput);
    }
  }

  writer.Write(html);
}
于 2012-10-10T03:27:34.433 回答
1

在“Test.Aspx”中添加以下标签,然后重试

EnableViewStateMac="false" ViewStateEncryptionMode="Never" EnableEventValidation="false"

于 2012-10-10T03:38:39.147 回答
1

当作为 POST 请求的一部分发送的 ViewState 与控件集合不匹配时,您会收到此错误。

收到您请求的页面是Test.aspx

开始 EnableViewStateMac="false"Test.aspx你的问题应该得到解决。

于 2012-10-10T03:39:25.807 回答