在一个非常大的应用程序中,具有深度嵌套的用户控件(准确地说是共享点应用程序),我有一个 ascx 控件:
<asp:HiddenField ID="hdnSelectedLCID" runat="server" />
在后面的代码中:
protected void Page_Load(object sender, EventArgs e)
{
uint uLcid = (uint)Thread.CurrentThread.CurrentUICulture.LCID;
hdnSelectedLCID.Value = uLcid.ToString();
}
然而,当我渲染我的页面时,我得到了一个模糊的错误:
视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。
如果我删除隐藏字段,问题就会消失。
有人可以解释我为什么吗?
PS:错误消息总是导致一些众所周知的问题:配置文件中缺少或不一致的加密密钥。在这里,我有一个正确的设置。所以这不是问题的根源。
我发现使问题消失的另一种方法是禁用事件验证(通过在我的 web.configeventValidation="false"
的<pages>
节点上添加。但我认为这不是一个好习惯