ASP.NET выходной кэш MVC с динамическим фрагментом

Как я мог кэшировать всю страницу кроме немного наверху, вроде которой говорит что-то "Welcome back, Matt! | Log Out" если пользователь зарегистрирован и так далее?

Я использую ASP.NET MVC 2.

9
задан abatishchev 4 August 2010 в 10:33
поделиться

4 ответа

То, что вы пытаетесь достичь, называется кэшированием пончика или подстановкой кеша. В ASP.NET MVC 2 нет встроенного помощника для поддержки этого сценария. Насколько я знаю, это была запланированная функция в MVC v.1, но она была упразднена где-то на пути к выпуску. Для получения дополнительной информации проверьте эти ссылки http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx , Правильно ли работает кеширование пончиков? с ASP.NET MVC? . Опция VaryByParam, о которой упоминал здесь Олег, в вашем случае не лучшая идея. Если у вас есть VaryByParam, другая версия страницы будет помещена в кеш для каждого другого значения параметра (в вашем случае для каждого имени пользователя). Лично я бы подумал о кешировании данных, а не всего вывода страницы.

6
ответ дан 4 December 2019 в 21:47
поделиться

Возможно, поможет

<%@ OutputCache Duration="15" VaryByParam="*" %>

или с каким-то другим значением для VaryByParam. См. http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx, http://blog.maartenballiauw.be/post/2008/06/Creating-an-ASPNET-MVC-OutputCache-ActionFilterAttribute.aspx и http://blogs.microsoft.co.il/blogs/gilf/archive/2010/07/18/asp-net-output-cache-provider.aspx.

Более того, если у вас есть стартовая страница, которая не зависит от пользователя, можно заменить стартовую страницу на очень статичную приветственную страницу с пустым полем (скрытый div) вместо "Welcome back, Matt! | Log Out". После этого на стороне клиента может быть запущен ajax-запрос для заполнения имени пользователя. Такая страница приветствия может очень хорошо кэшироваться.

3
ответ дан 4 December 2019 в 21:47
поделиться

Здесь у вас есть временное решение:

* Добавьте атрибут OuptutCache к контроллеру, который управляет всем представлением, как обычно:

[OutputCache(Duration = 3600, VaryByParam = "*")]
public ActionResult Index(FormCollection formCollection)
{
   //Controller code
}

* Для той части, которую вы не хотите выполнять кэширование, загрузите ее, используя jquery + запрос ajax (с собственным контроллером и без атрибута OutputCache ):

<div id="loginContainer"></div>

$(document).ready(function() {

    $.post('controller/action', postdata, function(data) {

    if (data.success == true) {

        //Populate the container with the obtained data
    }
    });

});

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

0
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: