ASP.NET «Кеширование пончиков» не работает - PullRequest
3 голосов
/ 08 апреля 2010

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

У меня есть пользовательский элемент управления под названием «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;
}

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

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

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

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

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

0 голосов
/ 19 октября 2011

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

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

...