3

データベースにクエリを実行し、結果を表示するための検索フィールドを含むページがあります。ビューステートは、ドロップダウンのアイテムのリストを保持するために必要です。

Firefox (3) と Chrome ではすべて正常に動作しますが、Internet Explorer では失敗しますが、たまにしか機能しません (フォームのリセットなどの特定のアクションで、実際にはいくつかのクエリ文字列パラメーターを使用して response.redirect を実行するだけです)... Viewstate が URL にダンプされ、エラー ページがスローされます。

誰もこれに遭遇したことがありますか?おそらく、これが IE で発生する原因についてのいくつかの指針はありますか?

ありがとうございます。

グレッグ

アップデート:

さらに調査した結果、実際のエラーは次のとおりであることがわかりました。

「viewstate MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。AutoGenerate はクラスターでは使用できません。」

役立つ可能性があるその他の情報: これは、コンテンツ管理システム (Umbraco) でホストされているユーザー コントロールが原因であり、viewstate がページに渡される理由に関係している可能性があります (コントロールが含まれているため)。 CMS のより大きなページ)。私はこれをもう少し調査しますが、他の提案があれば大歓迎です。

乾杯グレッグ

更新 2:

なぜこれが IE でのみ発生するのか (FF や Chrome では発生しないのか) を誰かが提案できますか?? 他のブラウザが問題なく処理できる場合、コントロールの変更、マシンキー、または私がその場所で読んだその他の提案の問題である可能性はほとんどないようです。

この失敗を引き起こす可能性のある IE の動作の違いについてのアイデアはありますか??

解決:

CMS で間違ったマスター テンプレートを使用していたため、フォーム タグが 2 つありました。余分なフォームタグを削除してください。問題は解決しました!

この問題の解決を手伝ってくれた bendewey に感謝します (bendewey の投稿のコメントを参照してください)。

それは私の人生の 4 時間です。戻りたいと思っています。スタック オーバーフロー コミュニティに感謝します :)

4

3 に答える 3

1

ビューステートが URL に投稿されているのは少し奇妙に思えます。これは、デフォルトの asp.net ページ レベルのフォーム タグの代わりに GET メソッドを使用するカスタム フォーム タグがある場合に発生します。

GET メソッドを含むフォーム タグが必要な場合は、Page 宣言で EnableViewState="false" を設定し、ある種のリスト キャッシュを設定します。以下にサンプルを示しますが、より優れたサンプルをオンラインで見つけることができます (特に、ロックのダブル チェックを行うサンプル)。これにより、ポストバックごとにこれを呼び出すことができ、ビューステートに何かを保存することを心配する必要がなくなります。

List<string> getCachedFields()
{
    var searchFields = Cache["searchFields"] as List<string>;
    if (searchFields == null)
    {
        searchFields = GetFieldsFromDbOrSomewhereExpensive();
        Cache["searchFields"] = searchFields;
    }
    return searchFields;
}
于 2009-02-11T04:19:35.620 に答える
1

このブログの提案を使用して、この問題を修正しました。ぜひご覧ください...

于 2009-02-11T04:53:18.457 に答える
0

IE でのエラーを回避するためにEnableViewStateMac="false"、要素から削除する必要がありました。<pages>

于 2015-10-06T11:57:00.047 に答える