asp:hiddenfield打破了我的观点

时间:2012-08-30 14:49:15

标签: asp.net viewstate

在一个非常大的应用程序中,通过深度嵌套用户控件(一个共享点应用程序是准确的),我有一个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();
}

然而,当我渲染我的页面时,我得到了一个模糊的错误:

  

viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法。无法在群集中使用AutoGenerate。

如果删除隐藏字段,问题就会消失。

有人能解释我为什么吗?

PS:错误消息总是会导致一个众所周知的问题:配置文件中缺少或不一致的加密密钥。在这里,我有一个正确的设置。所以这不是问题的根源。

我发现让问题消失的另一种方法是禁用事件验证(通过在我的web.config的eventValidation="false"节点上添加<pages>。但我认为这不是一个好习惯< / p>

1 个答案:

答案 0 :(得分: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();
}