Как не кэшировать пользовательский элемент управления ASP.NET? - PullRequest
5 голосов
/ 10 августа 2009

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

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

Ответы [ 3 ]

10 голосов
/ 11 августа 2009

Лично я использую атрибут 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:

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

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

1 голос
/ 10 августа 2009

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

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

0 голосов
/ 04 февраля 2011

Вы можете создать фильтр кеша: http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx

Проверьте внутри этого фильтра, зарегистрирован ли пользователь или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...