2011-02-04 1 views
3

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

[OutputCache(Duration = 3600, VaryByParam = "none", Location = OutputCacheLocation.Client)] 
    public ActionResult Index(string schooljaarparam) { 
     return View(_db.Lesplaatsens.Where(l => l.Schooljaar.Sch_Schooljaar == schooljaarparam).OrderBy(q => q.Lpl_Gemeente).ThenBy(q => q.Lpl_Instelling).ToList()); 
    } 

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

Я думал, что это будет общий вопрос, но я пока не нашел решение.

Думаю, вам нужно использовать HttpResponse.RemoveOutputCacheItem() , но как найти маршрут. И где я могу увидеть текущие кешированные элементы в отладчике?

+0

Вы помещаете это на свой контроллер? – Aliostad

+0

Нет, это действие моего индекса. – Stefanvds

+0

Index action => Итак, на вашем контроллере? – Aliostad

ответ

2

Вы не можете удалить кэшированные элемент, потому что не существует (т.е. вы не кэширует его на сервере).

Когда вы скажете Location = OutputCacheLocation.Client, браузер будет кэшировать ответ и даже не отправит новый запрос на ваш сервер, если пользователь запрашивает одну и ту же страницу, если срок действия кеша не истечет, или пользователь конкретно запрашивает последнюю версию, нажав F5.

+0

браузер не кэширует его на самом деле, я имею в виду, браузер НЕ Кэш его, но все же делает запрос на сервер. Затем сервер отвечает «304 Not Modified», который указывает браузеру использовать свой собственный кеш. если браузер возвращает 200 OK, браузер загрузит страницу ... – Stefanvds

+0

@Stefanvds Я только что проверил снова, чтобы убедиться (я тестирую с ASP.NET MVC 2). Поведение для 'OutputCacheLocation.Client' похоже на описанное в ответе. –