2010-12-11 4 views
6

Используя веб-формы ASP.NET MVC, мы можем поместить выходной кэш либо на уровне контроллера, либо на уровне просмотра. Как мы можем упомянуть «outputcache» на странице .cshtml?OutputCache в Razor view engine .cshtml page

Я не нашел его нигде. Где я могу получить синтаксис?

+0

Hello Micheal; Вы сами нашли ответ? –

ответ

7

Что вы подразумеваете под «ASP.NET MVC Web Forms»? Если вы ссылаетесь на атрибут OutputCache в директиве «Страница», то есть на веб-формы ASP.NET.

ASP.NET MVC имеет кэширования выходных данных на уровне действия контроллера:

[OutputCache(Duration=10, VaryByParam="none")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

Это независимо от вида двигателя (ASPX/бритвы).

+0

Извините, я должен был упомянуть его как движок веб-форм. – ram

+0

Что значит «движок веб-форм»? Используете ли вы ASP.NET MVC или ASP.NET Web Forms? Web Forms = директива OutputCache в директиве ASPX-страницы. MVC = атрибут OutputCache для действия контроллера. – RPM1984

+1

Вы также можете установить его в представлении: http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx Но как вы это делаете с помощью бритвы viewengine? – Peter

2

С помощью веб-форм ASP.NET MVC вы можете поместить выходной кеш на уровень представления, но это не повлияет. Это там, потому что это наследие от классического ASP.NET. В ASP.NET MVC выходной кеш всегда должен быть помещен в действие контроллера.

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

+1

Phil Haacked, похоже, не согласен: http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx – Peter

+2

@DePeter Но как вы это делаете в бритве? – AaronLS

2

Обратитесь к последнему сообщению Мастер Гу на эту тему: MVC2 Announcement

Particulary эта часть:

Output Caching Улучшения

система кэширования вывода ASP.NET MVC 3 в нет дольше требуется указать свойство VaryByParam при объявлении атрибута [OutputCache] на Метод действия контроллера. MVC3 Теперь автоматически изменяет выходной кэшируются записи, когда у вас есть явные параметры на ваш метод действия - позволяет аккуратно включить выходной кэширование действий с помощью кода, как ниже:

alt text

В дополнение к поддержка полной страницы выходное кэширование, ASP.NET MVC 3 также поддерживает кеширование с частичной страницей - которое позволяет кэшировать область вывода и повторно использовать ее по нескольким запросам или контроллеров. [OutputCache] поведение для кэширования частичной страницы была обновлена ​​с RC2, так что суб-контент кэшированные записи изменяется на основании входных параметров, в отличие от структуры URL запроса верхнего уровня - , что делает сценарии кэширования как проще и мощнее, чем поведение в предыдущем RC.

Так что это улучшает для нас многое.

  1. Простое упоминание OutputCache о действии контроллера позаботится об обналичивании результата от этого конкретного действия в течение определенной продолжительности. Кэш-память будет автоматически изменяться при определенных параметрах действий (которые, как правило, желаемое поведение.)
  2. Он также будет работать прозрачно на ребенка действия (те, вызываемые с помощью Html.Action (...))
+0

Что такое решение вашего образца - метод поиска - если реализуются параметры уровня нитей? Например; метод может иметь встроенный параметр в качестве строки lang = Thread.CurrentThread.CurrentUICulture.cultureInfo.DisplayName, и этот параметр не имеет смысла для знака метода (поскольку он имеет только один параметр в качестве категории имени, но результат зависит от культуры. –

+0

это не отвечает вопрос, описывает только некоторые части кеширования. – twomm

1

Звучит так, как будто другие ответили на главный вопрос: не настроить кеширование страницы в файле/cshtml в MVC3 +, использовать метод Action в контроллере.

Однако для более сложных сценариев вы можете получить доступ к объекту WebCache с помощью синтаксиса Razor.

Некоторые из этих сценариев - старый пончик/пончик (или пончик/Dounut) кеширование. MVC3 сфокусировал поток здесь на Stack Overflow.

Также найден пакет NuGet MvcDonutCaching, упомянутый Denis Huvelle, который решает проблему для 3 & 4 - но я ее не тестировал.