ASP.NET のすべてのセキュリティ機能を無効にする (まったくお勧めできません) 代わりに、実際のエラーを解決することに集中する必要があります。
System.Web.HttpException (0x80004005): Validation of viewstate MAC failed
よくあるエラーです。machinekey
これを解決するには、web.config ファイルで使用するを定義する必要があります。これは通常、ポストバック全体で 2 つの異なるキーがあることが原因です。ほとんどの場合、web.config で定義すると問題が解決します (viewstate 暗号化などのセキュリティ機能を再度有効にすることを忘れないでください)。ここで生成できます: http://aspnetresources.com/tools/machineKey
例については、この投稿を参照してください: https://stackoverflow.com/a/6260201/375304 (ただし、同じキーは使用しないでください)。
また、このリンクを見てください。マシンキーに関連する ASP.NET セキュリティ機能を理解するのに役立つ場合があります。
http://msdn.microsoft.com/en-us/library/ff649308.aspx
更新:これのいずれかが機能しない場合は、次を試してください ( source ):
上記の #3 に基づく別のソリューションです。これを以下のコメントに投稿してくれた Alex に特に感謝します。彼は、この問題を修正する BasePage という小さなクラスを作成したので、Page ではなく BasePage からページを拡張するだけで済みます。
public class BasePage : Page
{
private static string[] aspNetFormElements = new string[]
{
"__EVENTTARGET",
"__EVENTARGUMENT",
"__VIEWSTATE",
"__EVENTVALIDATION",
"__VIEWSTATEENCRYPTED",
};
protected override void Render(HtmlTextWriter writer)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
string html = stringWriter.ToString();
int formStart = html.IndexOf("<form");
int endForm = -1;
if (formStart >= 0)
endForm = html.IndexOf(">", formStart);
if (endForm >= 0)
{
StringBuilder viewStateBuilder = new StringBuilder();
foreach (string element in aspNetFormElements)
{
int startPoint = html.IndexOf("<input type=\"hidden\" name=\"" + element + "\"");
if (startPoint >= 0 && startPoint > endForm)
{
int endPoint = html.IndexOf("/>", startPoint);
if (endPoint >= 0)
{
endPoint += 2;
string viewStateInput = html.Substring(startPoint, endPoint - startPoint);
html = html.Remove(startPoint, endPoint - startPoint);
viewStateBuilder.Append(viewStateInput).Append("\r\n");
}
}
}
if (viewStateBuilder.Length > 0)
{
viewStateBuilder.Insert(0, "\r\n");
html = html.Insert(endForm + 1, viewStateBuilder.ToString());
}
}
writer.Write(html);
}
}