2010-04-08 4 views
3

У меня есть страница ASP.NET, где я пытаюсь выполнить некоторое кэширование вывода, но столкнулся с проблемой. Моя страница ASPX имеетASP.NET 'Donut Caching' не работает

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

У меня есть пользовательский элемент управления под названием «PageHeader» на странице ASPX. В 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, ударил ВСЕГДА? –

+0

Работает ли это нормально, если вы удаляете OutputCache? – Glennular

+0

Да, его ударяют каждый раз. Но даже если у меня есть какое-то значение в сеансе, его показ моего сеанса равен нулю. Я удалил директиву кэша вывода из Default.aspx и работал хорошо. Но работает ли кэширование здесь? Нет, я думаю. Правильно? – Shyju

ответ

1

Вы захотите кэшировать несколько версий вашей страницы. Вам будет нужен один для входа в систему и один для гостевого режима. Вы можете установить два разных вида либо VaryByParams, либо VaryByHeaders.

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

0

Исходя из ваших комментариев, которые вы используете Session, знайте, что это общая проблема с контролем Замены: Сессия не доступна в методе обратного вызова по дизайну. (Он указан в экземпляре контекста, но всегда равен нулю.)

Для этого можно воспользоваться Answer to How to use ASP.Net server controls inside of Substitution control?, хотя я проверил два раза, чтобы проверить, не взломан ли сеанс управления обработкой управления сеансом или нет ...