2010-04-08 99 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控件,我想根據登錄的用戶顯示一些鏈接。

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

,但是網頁仍然顯示了同樣的內容爲登錄用戶和來賓用戶。

我的目標是讓頁面被緩存,除了替換控件中的內容。我該怎麼做呢?

+0

如果你在GetUserProfileHeaderLinks裏添加一個斷點,是否總是命中? – 2010-04-08 16:48:10

+0

如果刪除OutputCache,它可以正常工作嗎? – Glennular 2010-04-08 17:05:57

+0

是的,它每次都被擊中。但即使我在會話中有一些價值,它顯示我的願望爲零。 我從Default.aspx中刪除了輸出緩存指令,它工作得很好。但是緩存工作在這裏嗎?不,我想,對吧? – Shyju 2010-04-09 15:51:41

回答

0

根據您的意見,您使用的會話,知道這是替代控制一個共同的問題:Session是不是在設計回調方法可用。 (這是在上下文中的實例中,但始終爲空。)

一種方式來做到這一點,請參見Answer to How to use ASP.Net server controls inside of Substitution control? - 雖然我有雙重檢查,以查看是否渲染控制黑客初始化會話或不...