質問

IE8にページのリロードを取得するために多くの方法を試しましたが、失敗しました。つまり、Webサーバーに尋ねることなく、内部キャッシュを使用し続けています。

私は私のウェブサーバーから次のヘッダーを送信します:

Response.Add(new StringHeader("Expires", DateTime.UtcNow.AddYears(-1).ToString("r")));
Response.Add(new StringHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"));
Response.Add(new StringHeader("Pragma", "no-cache"));
Response.Add(new StringHeader("Last-Modified", DateTime.UtcNow.ToString("r")));

それは私が試した多くの組み合わせの1つにすぎません。

IEを毎回ページを取得するにはどうすればよいですか(ユーザーがIE内のキャッシュをオフにするように強制せずに)?

役に立ちましたか?

解決

適切な方法は、これらのHTTPヘッダーを応答に送信することです。

Pragma: no-cache
Expires: -1
Cache-Control: no-cache, no-store

それらを使用すると、他の変更なしにすべてがIEで機能します。

他のヒント

最も簡単な方法は、クエリ文字列に圧縮日付/タイムスタンプを使用してパラメーターを追加することです。これにより、ブラウザのまったく新しいページのように見えます。

簡単な更新, 、サーバーにデータを投稿する場合、IEはキャッシュをスキップして新しいデータをロードします。ただし、Get Requestsのみを発行している場合、IEはURLを調べて、キャッシュから引っ張るか実際にサーバーに移動するかを判断する独自の設定です。

これで、ユーザーが「保存されたページの新しいバージョンのチェック」がない場合、クエリ文字列に値を追加する以外にできることは何もありません。見る KB263070 これらのオプションに関するMSの詳細については。 Microsoftの回答をすばやく見ると、これに少し多くの人がいることが示されています。常に与えられているソリューションは、ユーザーがキャッシュ設定を変更することです。

だから、あなたにとって、解決策は(複雑さのレベルで)になるだろう

  1. 非常に変動するクエリ文字列値を追加します
  2. ユーザーに、「新しいバージョンのチェック」設定をページに訪問するたびに、または自動的に変更する必要があることを通知します。
  3. リンクを変更して、ポストバックを引き起こします。 (ヤック)

多くのアプリケーションは、アイテム2またはアイテム1のいずれかを選択します。その理由は、2がコードベースに最も影響が少ないため、アイテム1はユーザーに最も影響が少ないためです。

これが管理サイトである場合、ユーザーのデスクトップ設定にかなりのレバレッジがあるはずなので、オプション2を使用すると思います。

うまくいけば、私はあなたの質問を理解しています、多分これを試してみてください、これは明らかになります:

   List<string> keys = new List<string>();
    IDictionaryEnumerator enumerator = Cache.GetEnumerator();
    while (enumerator.MoveNext())
    {
        keys.Add(enumerator.Key.ToString());
    }

    foreach(string key in keys)
    {
        Cache.Remove(key);
    }

これが複数のページにある必要がある場合は、マスターページに配置できます(または、他のリファクタリングを使用します)。

上記があなたが探しているものではない場合、outputCacheディレクティブもあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top