3

出力キャッシュを実行しようとしている ASP.NET ページがありますが、問題が発生しました。私の ASPX ページには

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MYProject._Default" %>
<%@ OutputCache Duration="600" VaryByParam="None" %>
<%@ Register TagPrefix="MYProjectUC" TagName="PageHeader" Src="~/Lib/UserControls/PageHeader.ascx" %>
<%@ Register TagPrefix="MYProjectUC" TagName="PageFooter" Src="~/Lib/UserControls/PageFooter.ascx" %>

ASPX ページに「PageHeader」というユーザー コントロールがあります。には、ログインしているユーザーに基づいていくつかのリンクを表示したいPageHeader.ascxASP.NETコントロールがあります。Substitution

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PageHeader.ascx.cs" Inherits="MyProject.Lib.UserControls.PageHeader1" %>
<div class="headerRow">
    <div class="headerLogo">
        <a href="Default.aspx"><img src="Lib/Images/header.gif" alt=""></a>
    </div>
    <div id="divHeaderMenu" runat="server">         
        <asp:Substitution ID="subLinks" runat="server" MethodName="GetUserProfileHeaderLinks" />
    </div>   
</div><!--headerRow-->

ユーザー コントロールのコード ビハインドには、セッションを使用してログインしているかどうかに基づいて文字列を返す静的メソッドがあります。

public static string GetUserProfileHeaderLinks(HttpContext context)
{
    string strHeaderLinks = string.Empty;
    // check session and return string
    return strHeaderLinks;
}

ただし、ページには、ログイン ユーザーとゲスト ユーザーの両方に対して同じコンテンツが表示されます。

私の目的は、置換コントロール内のコンテンツを除いてページをキャッシュすることです。どうすればいいですか?

4

2 に答える 2

1

ページの複数のバージョンをキャッシュしたいと思うでしょう。ログイン ビュー用に 1 つ、ゲスト ビュー用に 1 つ必要になります。VaryByParams または VaryByHeaders のいずれかによって、2 つの異なるビューを設定できます。

http://msdn.microsoft.com/en-us/library/aa719665%28v=VS.71%29.aspx

于 2010-04-08T16:51:39.873 に答える
0

セッションを使用するというコメントに基づいて、これが置換コントロールの一般的な問題であることを認識してください。セッションは、設計上、コールバック メソッドで使用できません。(Context インスタンスにリストされますが、常に null です。)

Substitution コントロール内で ASP.Net サーバー コントロールを使用する方法への回答を参照してください。これを行う方法について—レンダーコントロールハックがセッションを初期化するかどうかを再確認しましたが...

于 2011-10-19T17:43:23.480 に答える