С# с использованием OutputCache в проекте MVC3

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

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

Мой код выглядит следующим образом:

[OutputCache(CacheProfile = "VideoIndexView")]
public ActionResult Index()
{
    ...
    return View(model);
}

person joepour    schedule 15.12.2011    source источник


Ответы (2)


Вы можете вызвать статический метод RemoveOutputCacheItem, когда хотите очистить какой-либо URL-адрес от кеш.

person Darin Dimitrov    schedule 15.12.2011
comment
Работает ли RemoveOutputCacheItem, когда аргументом является имя CacheProfile? - person escist; 20.06.2013

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

[OutputCache(CacheProfile = "VideoIndexView")]
public ActionResult Index()
{
    ...
    return View(model);  // Really only return a model that is okay to be cached
}

public ActionResult LoadData ()
{
    var Result = // Load the data
    ...
    return Json(Result);  // Don't forget to allow GET here if you're using HTTPGET
}

// Or...

public ActionResult LoadData ()
{
    var Result = // Load the data
    ...
    return PartialView (Result);
}

Таким образом, Index можно просто кэшировать, а данные будут загружены и введены на страницу после того, как страница будет предоставлена ​​пользователю. Если вы собираетесь использовать что-то вроде jQuery, обязательно сообщите ему, чтобы он не использовал кешированные результаты, если вы используете GET.

person Jim D'Angelo    schedule 15.12.2011
comment
К сожалению, мне приходится использовать БД MS Access, которая не поддерживает команды TOP или LIMIT. Это означает, что у меня есть довольно большой набор данных для работы, и на самом деле я хочу кэшировать строки, а не страницу или другие частичные представления. - person joepour; 15.12.2011
comment
Да, но вы также можете кэшировать свои результаты в методе LoadData и просто отправлять фрагменты страницы, как только клиентская сторона будет готова к ним. - person Jim D'Angelo; 15.12.2011