1

在一个非常大的应用程序中,具有深度嵌套的用户控件(准确地说是共享点应用程序),我有一个 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>节点上添加。但我认为这不是一个好习惯

4

1 回答 1

1

我不知道您的问题的确切解决方案,但我想您需要停止使用 asp.net 控件“asp:HiddenField”并尝试使用隐藏类型为 runat 服务器的普通 html 输入。

<input type="hidden" id="hdnSelectedLCID" runat="server"/>

然后您可以从后面的代码中访问此控件属性,就像“asp:HiddenField”控件一样。

protected void Page_Load(object sender, EventArgs e)
{
    uint uLcid = (uint)Thread.CurrentThread.CurrentUICulture.LCID;
    hdnSelectedLCID.Value = uLcid.ToString();
}
于 2012-08-30T14:58:04.780 回答