9

IE メソッドを使用して、ポップアップ ウィンドウをモーダル ダイアログとして実装しました。

window.showModalDialog('...aspx')

ポップアップ ウィンドウのターゲットは、それ自体が ASP.Net Web ページです。

次の手順では、ポップアップが一度も起動されていないと仮定します。

  1. ポップアップを起動します。
  2. Page_Load イベント ハンドラーはサーバー側で実行されます。
  3. ポップアップを閉じます。
  4. すぐにポップアップを再度起動します。
  5. 今回は Page_Load イベント ハンドラは実行されません。

ステップ 4 でインターネット一時ファイルをクリアすると、Page_Load イベント ハンドラが 2 回目に実行されるため、ポップアップ コンテンツがキャッシュされていることは明らかです。

Web ページのヘッドに以下を追加して実験しましたが (他のいくつかの情報源で推奨されているように)、どれも機能していないようです。

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />

これらの使用が推奨されていない場所も見られます

誰でも助けることができますか?

4

9 に答える 9

9

ダイアログ コンテンツの URL にタイムスタンプ クエリ文字列変数 (2008 年 1 月 1 日以降のティック数など) を追加します。IE はそれを新しいページとして扱い、キャッシュを無視します。

于 2008-12-01T12:17:48.347 に答える
8

キャッシュをクリアするには、これをページの読み込みに追加します。

Response.Cache.SetCacheability(HttpCacheability.NoCache);
于 2010-02-26T16:04:08.953 に答える
4

http-equiv ディレクティブが機能しない (おそらく使用すべきではない) ことを考えると、残念ながらソリューションのハック カテゴリに含まれているにもかかわらず、これを使用する必要があると思います (Greg による投稿)。 ..

url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&amp;” + date.getTime(), ... );

これらのモーダル ダイアログでキャッシュを無効にする決定的な方法がないのは奇妙です。Web ブラウザーでモーダル ダイアログを使用することが「良い考え」として受け入れられるかどうかはわかりませんが、少なくともいくつかの欠点と代替手段を認識していますが、残念ながらこのプロジェクトではそれらを使用できません。

ご提案いただきありがとうございます。

于 2008-12-02T09:26:28.600 に答える
2

IEとサーバーの間にFiddlerを配置します。次に、リクエストへの応答にHTTPヘッダーCache-Controlが含まれているかどうかを確認します。キャッシュなし以外に与えられた値はありますか?その場合、IEはこのヘッダーをhttp-equivディレクティブよりも優先する可能性があります。

そうでない場合は、サーバーにHTTPヘッダーCache-Control:no-cacheを送信させるようにしてください。IEがこれを尊重しない場合、それはIEのバグです。経験によれば、バグ修正を押すよりも別の解決策を選ぶほうが苦痛は少ないので、この場合、私はグレッグの助言に同意します。

于 2008-12-01T13:53:01.633 に答える
2

まず、次のコードを使用してみました。

meta http-equiv="Cache-Control" content="no-cache" 
meta http-equiv="Pragma" content="no-cache" 
meta http-equiv="Expires" content="-1" 

しかし、その後は解決策がありませんでした。次のように、タイムスタンプ変数を使用してクエリ文字列を試しました

vat time = new Date().getTime();

url?queryString&time=time

それは動作します....

ありがとう...

于 2011-10-04T16:41:01.377 に答える
1

ページを再処理するためのタグを忘れました。

<base target="_top" />

以下のタグを配置すると、キャッシュがクリーンアップされます。

<meta http-equiv="Expires" content="0" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<base target="_top" />
于 2011-02-02T10:32:41.723 に答える
0

答え Response.Cache.SetCacheability(HttpCacheability.NoCache); IE9 で正しく動作する唯一のものです。クエリ文字列にタイムスタンプを設定した場合でも、ページを更新して別の URL を取得する必要があります。そのため、モーダル ダイアログは、Response.Cache.SetCacheability(HttpCacheability.NoCache); を使用しない限り、ページが更新されるまでキャッシュされます。URL と Response.Cache.SetCacheability(HttpCacheability.NoCache) でタイムスタンプを使用します。すべてのベースをカバーするのが最善です。結局、私たちが扱っているのは IE です。

于 2012-05-18T03:15:27.170 に答える
0

IE の奇妙な癖の 1 つは、ファイルの先頭に no-cache を設定しても機能しないように見えることですが、そのセクションを元の HTML の後に移動すると機能することがよくあります。HTTP ヘッダーとして送信するのが最善ですが、ほとんどの場合、次の方法で機能します。

<html>
   <head><title>Blah</title></head>
   <body>Contents</body>
</html>
<html>
   <head>
      <meta http-equiv="Cache-Control" content="no-cache" />
      <meta http-equiv="Pragma" content="no-cache" />
      <meta http-equiv="Expires" content="-1" />
   </head>
</html>
于 2009-01-07T16:46:27.380 に答える
0

呼び出される aspx ページの上部で次のステートメントを試すこともできます。

<%@ OutputCache Location="None" %>
于 2012-08-09T03:54:22.383 に答える