2012-04-03 2 views
1

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

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

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

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

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

Спасибо,

Винсент

ответ

4

От 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 
} 

Вещь слева, чтобы сделать ваше пользовательский элемент управления в строку.Для этого вы можете использовать технику, предложенную в статье Скотта Гатри Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios. В этом случае для визуализации пользовательского элемента управления просто используйте что-то вроде:

return ViewManager.RenderView("UserInfo.ascx"); 
+0

Отлично! Спасибо :) – Vinzcent

0

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

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

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