2010-04-08 63 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? - 虽然我有双重检查,以查看是否渲染控制黑客初始化会话或不...