Атрибут Outputcache на стороне клиента с частичными страницами

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

[OutputCache(Duration=7200, Location  =OutputCacheLocation.Client, NoStore= true)]

но я получаю следующую ошибку

OutputCacheAttribute for child actions only supports Duration, VaryByCustom, and VaryByParam values. Please do not set CacheProfile, Location, NoStore, SqlDependency, VaryByContentEncoding, or VaryByHeader values for child actions

Любая альтернатива этому


person Tassadaque    schedule 20.06.2011    source источник
comment
удалите NoStore из атрибута.   -  person Furqan Hameedi    schedule 20.06.2011


Ответы (1)


Кэширование на стороне клиента невозможно для частичных файлов в MVC 3. Браузер клиента просто получает HTML, «частичные» существуют только на стороне сервера.

Почему вы не используете кэширование на стороне сервера?

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

[OutputCache(Duration=7200, VaryByParam="*")]  
public PartialViewResult Menu(int userId)
{
   ...
}
person Chaim Zonnenberg    schedule 21.06.2011
comment
Не будет ли это занимать слишком много памяти на сервере? Это создаст столько экземпляров, сколько активных пользователей в течение 2 часов. И не уверен, но я полагаю, что это будет хранить фактический html в памяти, а не только некоторые переменные, поэтому пространство будет намного больше. - person Anestis Kivranoglou; 28.01.2014
comment
Это не практичное решение. Возможно, вы захотите показать приветственное сообщение вместе с именем пользователя в верхней части каждой страницы. И даже если бы вы могли добавить параметр, обозначающий пользователя, сохранение вывода для тысяч пользователей в памяти, по меньшей мере, не является разумным шагом. - person SepehrM; 15.06.2016