Нет OutputCache для UserControl - PullRequest
       8

Нет OutputCache для UserControl

1 голос
/ 03 апреля 2012

У меня есть страница со списком товаров из базы данных. И на той же странице у меня есть информация о вошедшем в систему пользователя. Эта информация находится в UserControl. (Невозможно поместить список продуктов в UserControl:))

Поэтому я установил это в верхней части моей страницы, чтобы кэшировать страницу

<%@ OutputCache Duration="200"
   Location="Any"
   VaryByParam="none"
%>

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

Я посмотрел блоки замещения. Но похоже, что это работает только с текстом?

Спасибо

Vincent

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

С MSDN :

Чтобы позволить вам кэшировать страницу, но динамически заменять некоторый контент, вы можете использовать ASP.NET подстановку после кэширования.С заменой после кэширования вся страница выводится в кеширование с определенными частями, помеченными как освобожденные от кэширования.В примере рекламных баннеров элемент управления AdRotator позволяет использовать преимущества замены после кэширования, чтобы объявления динамически создавались для каждого пользователя и для каждого обновления страницы.

Существует три способа реализации пост-кэширования.подстановка:

  • Декларативно с использованием элемента управления подстановки.

  • Программно с использованием API управления подстановкой.

  • Неявно, с использованием элемента управления AdRotator.

Я думаю, что лучшим вариантом будет использование элемента управления Substitution.Для этого добавьте элемент управления Substitution на свою страницу и установите его свойство MethodName:

<asp:Substitution runat="server" MethodName="GetUserInfo"></asp:substitution>

Теперь добавьте метод GetUserInfo на свою страницу.Элемент управления Substitution вызывает этот метод для получения информации о пользователе:

public static string GetUserInfo(HttpContext context)
{
    // return rendered user control
}

Осталось только преобразовать ваш пользовательский элемент управления в строку.Для этого вы можете использовать методику, предложенную в Совет / Уловка: Крутая техника шаблонирования пользовательского интерфейса для использования с ASP.NET AJAX для сценариев без UpdatePanel статья Скотта Гатри.В этом случае для визуализации пользовательского элемента управления просто используйте что-то вроде:

return ViewManager.RenderView("UserInfo.ascx");
0 голосов
/ 03 апреля 2012

Поместите список товаров в Session.Теперь получите к нему доступ из любой точки приложения.

YourColectionClass variable = Session["Sessionvariable"] == null ? 
            ClassObject.DatabaseFunction(Params) : 
            (YourColectionClass)Session["Sessionvariable"];

Теперь Cache это на основе VaryByparam.VaryByParam может иметь идентификатор пользователя.

...