1

非常に大規模なアプリケーションでは、ユーザー コントロール (正確には SharePoint アプリケーション) が深くネストされており、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 ファームまたはクラスターによってホストされている場合は、構成で同じ 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 に答える