2009-08-10 8 views
5

Я использую OutputCache на своей странице, у которой есть пользовательский элемент управления, но я не хочу кэшировать этот конкретный пользовательский элемент управления, потому что он связан с именем пользователя (если я обращаюсь к странице, я вижу страницу так, как если бы я был аутентифицируется другим пользователем).Как не кэшировать пользовательский контроль ASP.NET?

Как я могу это сделать?

ответ

10

Лично я использую атрибут VaryByCustom, чтобы дать войти в системе и вышел из пользователей различных мнений кэшированных страниц:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %> 

затем в global.asax вы положили

public override string GetVaryByCustomString(HttpContext context, 
    string arg) 
{ 
    if (arg == "IsLoggedIn") 
    { 

     if (context.Request.IsAuthenticated) 
     { 
      return "Logged in: " + context.User.Identity.Name; 
     } 
     else 
     { 
      return "Not Logged In"; 
     } 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 

} 

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

http://msdn.microsoft.com/en-us/library/ms228212.aspx

По данным сайта MSDN:

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

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

1

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

Вы можете использовать VaryByHeader="Cookie" для кэширования страницы для каждого набора файлов cookie, если идентификатор пользователя хранится в файле cookie. Вы можете использовать VaryByCustom="SomeString" и выполнить проверку на SomeString, чтобы сделать свой собственный чек для идентификации пользователя в методе GetVaryByCustomString в Global.asax.

Смежные вопросы