2010-04-08 2 views
3

일부 출력 캐싱을 시도하지만 문제가있는 ASP.NET 페이지가 있습니다. 내 ASPX 페이지ASP.NET '도넛 캐싱'이 작동하지 않습니다.

<%@ 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.ascx에는 ASP.NET Substitution 컨트롤이 있는데 로그인 한 사용자를 기반으로 몇 가지 링크를 표시하려고합니다. 페이지가 여전히 같은 표시

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

그러나 : 코드 숨김 내 사용자 컨트롤에서

<%@ 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--> 

나는이 로그인 또는 세션을 사용하지 않는 사용 여부에 따라 문자열을 반환하는 정적 메서드가 로그인 한 사용자와 게스트 사용자 모두를위한

내 목표는 대체 컨트롤 내부의 콘텐츠를 제외한 페이지를 캐싱하는 것입니다. 어떻게해야합니까?

+0

GetUserProfileHeaderLinks 내에 중단 점을 추가하면 항상 중단됩니까? –

+0

OutputCache를 제거하면 제대로 작동합니까? – Glennular

+0

예, 그 때마다 치고 받고 있습니다.하지만 세션에서 어떤 가치가 있더라도, 내 sesion을 보여주는 것은 null입니다. Default.aspx에서 Output cache 지시문을 제거하고 제대로 작동했습니다. 그러나 여기에서 캐싱이 작동합니까? 아냐, 아냐. 그래? – Shyju

답변

1

페이지의 여러 버전을 캐싱하려고 할 것입니다. Logged in보기와 게스트보기에 각각 하나씩 필요합니다. VaryByParams 또는 VaryByHeaders를 사용하여 두 가지 다른보기를 설정할 수 있습니다. 당신이 세션을 사용하여 귀하의 의견을 바탕으로

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

0

,이 대체 제어와 공통의 문제가 있음을 알고 세션은 디자인에 의해 콜백 메서드에서 사용할 수 없습니다. (문맥 인스턴스에 나와 있지만, 항상 null입니다.)

이 할 수있는 방법에 대한 Answer to How to use ASP.Net server controls inside of Substitution control?을 참조하십시오 - 나는 렌더링 제어 해킹 세션을 초기화 아닌지 재확인보고해야하지만 ...