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