我在action
代码中设置form
并收到以下错误:
对viewstate MAC的验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法。无法在群集中使用AutoGenerate。
我尝试了以下事项:
但没有运气。
请指导。
感谢您的帮助和分享。
修改
这是我页面的标记。
<%@ 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>
答案 0 :(得分:3)
如果更改了表单标签和按钮的标记,则可以完成跨页面发布。
步骤:
=============================================== ==========
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>
答案 1 :(得分:1)
我建议您覆盖页面的渲染事件,将加密的Viewstate和事件验证的隐藏字段放在窗体的顶部。这将确保在提交表单的任何内容之前写出这些内容。
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);
}
答案 2 :(得分:1)
在&#34; Test.Aspx&#34;中添加以下标签然后再试一次
EnableViewStateMac =&#34;假&#34; ViewStateEncryptionMode =&#34;决不&#34; EnableEventValidation =&#34;假&#34;
答案 3 :(得分:1)
当作为POST请求的一部分发送的ViewState与控件集合不匹配时,会出现此错误。
接收您请求的页面为Test.aspx
在EnableViewStateMac="false"
上设置Test.aspx
,您的问题就会得到解决。