2

ユーザーがフォームに入力または変更して保存し、後で必要に応じてフォームに戻って変更できる Web アプリがあります。フォームを保存すると、すべての値がデータベースに保存され、ユーザーがフォームに再度アクセスしたときに、それらの値を使用してフォームに入力されます。

ユーザーが保存後にフォームに戻るたびに、ユーザーがページを更新するまで、保存前の古い状態がフォームに表示されるようです。これは、ユーザーが [保存されたページの新しいバージョンを確認する] の Internet Explorer 設定を [Web ページにアクセスするたびに] に設定していない限り、毎回発生します。

問題は Internet Explorer でのみ発生し、他のブラウザでは問題はありません。うまくいかないキャッシュを防ぐために HTTP ヘッダーを設定しようとしました。

ページ ヘッドにメタ タグ<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="-1">を追加しようとしましたが、次のことも試しました。

Response.Expires = -1; 
Response.AddHeader("Pragma", "no-cache"); 
Response.CacheControl = "No-cache";
Response.Cache.SetCacheability(HttpCacheability.NoCache); 

コントローラーで。

そして、ここに応答ヘッダーがあります:

HTTP/1.1 200 OK
サーバー: ASP.NET 開発サーバー
/10.0.0.0 日付: 2013 年 8 月 26 日月曜日 20:10:33 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
プラグマ: キャッシュなし
Cache-Control: no-cache、no-store
プラグマ: no-cache
Expires: -1
Content-Type: text/html; charset=utf-8
Content-Length: 66131
接続: 閉じる

ユーザーがそのページにアクセスするたびに、保存されたページの新しいバージョンを IE に強制的にチェックさせる方法はありますか? そうでない場合、MVC3 でこの問題の回避策はありますか?

前もって感謝します!

4

2 に答える 2

3

私たちの回避策は、ページが毎回一意のアドレスを持ち、キャッシュから表示されないように、URL にタイム スタンプを渡すことでした。その後、タイム スタンプ パラメータはコントローラで無視されます。

于 2013-08-26T20:20:49.947 に答える
0

キャッシュを防止するための適切なヘッダーを設定できませんでした。正確に何を試したのか、問題のヘッダーは何だったのか (Fiddler を見てください)。

この記事では、IE の「新しいバージョンの確認」機能がどのように機能するかを説明します。

留意すべき最も重要な事実は、HTTP 応答にキャッシング ヘッダーがない場合、これら 4 つのオプションが動作に影響を与えるということです。キャッシュ ヘッダーが存在する場合、Internet Explorer は常にそれらを尊重します。

于 2013-08-26T19:09:44.710 に答える