- PR -

ASP.NETでページキャッシュさせない方法

投稿者投稿内容
FX
常連さん
会議室デビュー日: 2004/12/06
投稿数: 49
投稿日時: 2006-10-23 09:57
表題の件で悩んでおります。
ページAとページBがあります。ページAはDataGridコントロールが貼り付けられて
いて、テンプレート列を使用してImageコントロールを埋め込んでいます。
ページAは写真付きの一覧表で、そのうちの1行をクリックするとページBへと遷移する仕組みになっています。
ページBでは対象行の情報を受け取り、詳細情報の編集を行えます。この時、ページAで表示している写真の更新も行える仕組みなのですが、ページBで写真を更新たにも関わらず、ページAに戻っても写真が古いままになってしまいます。
そこでF5キーを一度押せばページが更新されて写真が変わります。ちなみに、写真を更新しても写真のファイル名はそのままです。データのみ更新しています。
ページAからページB、ページBからページAの遷移にはresponse.redirectを使用しています。
ページAが画像データをキャッシュしてしまっていると思い、色々調べて以下のような設定を行いました。
ページAのaspxに以下を追加
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<%@ OutputCache Duration="1" VaryByParam="none"%>

マイクロソフトのページを見るとOutputCacheディレクティブを設定すれば、いらない
のかもしれませんが、ディレクティブだけでは解消できずに、metaも入れてみましたが
効果はなしです。

アドバイス等よろしくお願いします。

環境
Visualstudio.NET 2003
OS WindowsXP SP2
言語 VB.NET
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-10-23 10:37
Page_Loadイベントで以下のコードを入れてみてください。
コード:
Response.Cache.SetCacheability(HttpCacheability.NoCache)

FX
常連さん
会議室デビュー日: 2004/12/06
投稿数: 49
投稿日時: 2006-10-23 11:36
うにくま様
レスありがとうございます。
Response.Cache.SetCacheability(HttpCacheability.NoCache)
をページAのPage_Loadに入れてみましたが、変化なしです。

ちなみにページAの実行時のHTMLヘッダは以下のようになっています。

<HEAD>
<title>result</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="-1">
</HEAD>
yuko
会議室デビュー日: 2006/10/23
投稿数: 1
投稿日時: 2006-10-23 11:46
<%@ OutputCache Location="None" VaryByParam="None" %>

これでどうでしょうか。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-23 12:55
> ちなみに、写真を更新しても写真のファイル名はそのままです。データのみ更新しています。

画像データがキャッシュされてるんじゃないですか?
だとしたらページのキャッシュを無効にするんじゃなくて、ファイル名変えるとか、とりあえず適当なクエリ文字列追加してやるとかといった手段が有効かと。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-10-23 13:09
ASP.NETのことは、わからないけど、

念のため、
コード:

Response.Cache.SetExpires(過去の日付)


を入れてみてはいかが。

さらに念を押すのであれば、HTMLのヘッダで
コード:

<meta http-equiv="Expires" content="-1">


とするのではなくて、
コード:

<meta http-equiv="Expires" content="過去の日付">


にしてみるとか。

この辺が参考になる?
http://www.atmarkit.co.jp/fjava/rensai2/webopt12/webopt12.html

以下追加
RFC 2068見ると、
Expiresに無効な日付フォーマットの場合は、クライアントはその日付を過去として扱わなければならない、とあるので上述内容を試しても、効果ないかもしれない。

[ メッセージ編集済み 編集者: かずくん 編集日時 2006-10-23 13:22 ]
しょくぱん
常連さん
会議室デビュー日: 2006/05/31
投稿数: 31
投稿日時: 2006-10-23 17:44
私も同じようなことで悩んだことがあります。
その時は画像ファイルのURLの後ろに?d=年月日時分秒をつけて
URLを表示するたび違うものにしました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-23 21:35
画像データは、どの様にして表示していますか?
Aページではなく、画像を返しているページがキャッシュされているとか。
引用:

ちなみに、写真を更新しても写真のファイル名はそのままです。データのみ更新しています。


ん? img src="..." で出している?

_________________

スキルアップ/キャリアアップ(JOB@IT)