繁体   English   中英

ASP.NET'甜甜圈缓存'无效

[英]ASP.NET 'Donut Caching' not working

我有一个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.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;
}

但该页面仍然显示登录用户和来宾用户的相同内容。

我的目标是让页面被缓存,除了替换控件中的内容。 我该怎么做呢?

您将要缓存页面的多个版本。 您将需要一个用于登录视图,一个用于访客视图。 您可以通过VaryByParams或VaryByHeaders设置两个不同的视图。

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

根据您使用会话的注释,请知道这是替换控件的常见问题:会话在回调方法中不可用。 (它在Context实例中列出,但始终为null。)

请参阅如何在替换控件中使用ASP.Net服务器控件答案? 为了这样做的方法 - 虽然我已经仔细检查以查看渲染控件是否初始化会话...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM