ASP.NET «Кэширование пончиков» не работает

У меня есть страница 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.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;
}

Но на странице по-прежнему отображается один и тот же контент как для вошедшего в систему пользователя, так и для гостя.

Моя цель - кэшировать страницу, за исключением содержимого внутри элемента управления заменой. Как мне это сделать?


person Shyju    schedule 08.04.2010    source источник
comment
Если вы добавляете точку останова внутри GetUserProfileHeaderLinks, нажимается ВСЕГДА?   -  person Claudio Redi    schedule 08.04.2010
comment
Нормально ли работает, если удалить OutputCache?   -  person Glennular    schedule 08.04.2010
comment
Да, это происходит каждый раз, но даже если у меня есть какое-то значение в сеансе, он показывает, что мой сеанс равен нулю. Я удалил директиву кеширования вывода из Default.aspx, и она сработала хорошо. Но работает ли здесь кеширование? Нет, я думаю. Верно?   -  person Shyju    schedule 09.04.2010


Ответы (2)


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

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

person Glennular    schedule 08.04.2010

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

См. ответ на вопрос, как использовать серверные элементы управления ASP.Net внутри элемента управления подстановкой?, чтобы сделать это - хотя я дважды проверил, инициализирует ли взлом элемента управления рендеринг сеанс или нет ...

person Jon Adams    schedule 19.10.2011