2011-08-12 6 views
0

なぜ、以下のaspxとコードの背後に、出力キャッシュがプログラムで有効になっている(コードビハインドで有効になっています)、機能しないと問題がありますか?ASP.NETプログラムで出力キャッシュを有効にすることができません - >なぜですか?

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="ProgrammaticOutputCaching" 
    CodeBehind="ProgrammaticOutputCaching.aspx.cs" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="lblDate" runat="server" Font-Bold="False" Font-Names="Verdana" Font-Size="XX-Large"></asp:Label><br /> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Refresh" /> 
    </div> 
    </form> 
</body> 
</html> 

コードの後ろに:問題はありません出力キャッシュ用のページディレクティブで

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Cache.SetCacheability(HttpCacheability.Public); 

     // Use the cached copy of this page for the next 60 seconds. 
     Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
     //Response.Cache.VaryByParams.IgnoreParams = true; 

     // This additional line ensures that the browser can't 
     // invalidate the page when the user clicks the Refresh button 
     // (which some rogue browsers attempt to do). 
     Response.Cache.SetValidUntilExpires(true); 

     lblDate.Text = "The time is now:<br>" + DateTime.Now.ToString(); 
} 



のaspxを意味します背後
<%@ Page Language="C#" AutoEventWireup="true" Inherits="OutputCaching" CodeBehind="OutputCaching.aspx.cs" %> 

<%@ OutputCache Duration="60" VaryByParam="Name;Age" Location="Server" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     &nbsp;<asp:Label ID="lblDate" runat="server" Font-Bold="False" Font-Names="Verdana" 
      Font-Size="XX-Large"></asp:Label> 
     <br /> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Refresh" /> 
    </div> 
    </form> 
</body> 
</html> 


コード:

protected void Page_Load(object sender, EventArgs e) 
{ 
     lblDate.Text = "The time is now:<br>"; 
     lblDate.Text += DateTime.Now.ToString(); 
} 

ので、プログラムについての問題は何ですか?

+0

「動作しません」と言われると、ページ上の日付が常に更新されている(つまりキャッシュされていない)、または別の問題があります(例外ですか?) –

+0

@Graham Clark hi:日付が常にページ上で更新されている(つまり、キャッシュされていない)ことを意味します。 – MoonLight

+0

また、私はoutputCachingのpageディレクティブには問題ありませんが、prorammatically! /私は影響を得るためにmachine.configまたはルートweb.configまたはアプリケーションweb.configの何かを変更する必要がありますか? – MoonLight

答えて

1
Response.Cache 

すべてのこれらのメソッドは、何かをするブラウザを尋ねる応答でmodifiy HTTPヘッダ(このケースでは、それがどのようにキャッシュのmodifiy)されます。

Fiddlerを使用しましたか?ブラウザが持っている可能性が

  • 私は(それは時間が変更されている知っているので)ASP.netは、最終更新日時を変更したことを推測する、しかしブラウザはまだ更新してしまう、いくつかの理由がありますキャッシュは、キャッシュがちょうど

  • ブラウザはそれが望んでいるものは何でも要求できる
  • サーバーからリフレッシュに必要なページを決定するためにいくつかの他の方法を使用しているがクリアされている可能性が
  • を無効

これらの点のいくつかを調べることをお勧めしますが、アプリの機能を確実にするためにブラウザのキャッシュに頼ってはいけません。

+0

回答ありがとうございます/私は別のブラウザで上位コードをテストしていません。(それらのすべての時間にリフレッシュボタンをクリックすると、変更する必要はありますが、そうすべきではありません)/これらのコードが機能することを知りましょうあなたかどうか? – MoonLight

+0

問題は、ほとんどのブラウザの機能をリフレッシュすることによって、具体的にページを再度要求することです(時間が更新されるように) –

+0

私のQを編集する/ほとんどのブラウザの機能をリフレッシュすることによって、更新される) - >しかし、そうすべきではない! UnCommentによる – MoonLight

関連する問題