0

以下の aspx とコード ビハインドで、出力キャッシュがプログラムで有効になっている (コード ビハインドで有効になっている) 場合、機能せず、問題が発生するのはなぜですか?

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();
}

出力キャッシュ用の page ディレクティブを使用しても問題はありません: 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();
}

では、プログラムの問題は何ですか?

4

1 に答える 1

1
Response.Cache

これらのメソッドが行うことはすべて、ブラウザーに何かを行うように要求する応答の HTTP ヘッダーを変更することです (この場合は、キャッシュ方法を変更します)。

Fiddlerを使用してこれらを確認しましたか?

ASP.net は最終更新日を変更したと思いますが (時間の変更を認識しているため)、ブラウザーがまだ更新される理由はいくつかあります。

  • ブラウザでキャッシュが無効になっている可能性があります
  • キャッシュがクリアされた可能性があります
  • 他の方法を使用して、サーバーから更新する必要があるページを決定しています
  • ブラウザは必要なものを何でもリクエストできます

これらの点のいくつかを調査することをお勧めしますが、アプリの機能を保証するためにブラウザーのキャッシュに頼るべきではありません。

于 2011-08-12T13:30:36.620 に答える