Кэширование в Internet Explorer asp.netmvc ajax результаты - PullRequest
18 голосов
/ 16 апреля 2010

У меня проблема со страницей в Internet Explorer. У меня есть вызов ajax, который вызывает форму в другом браузере, когда я щелкаю ссылку, которую она передает в контроллере, и правильно загружаю данные. но в IE, когда он загружен один раз, он всегда дает мне те же старые результаты без передачи в контроллер.

Ответы [ 7 ]

25 голосов
/ 16 апреля 2010

Попробуйте:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

Этот атрибут, помещенный в класс контроллера, отключает кеширование. Поскольку мне не нужно кэширование в моем приложении, я поместил его в свой класс BaseController:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public abstract class BaseController : Controller
{

Вот хорошее описание OutputCacheAttribute: Улучшение производительности с помощью кэширования вывода

Вы также можете включить его в действие.

10 голосов
/ 16 апреля 2010

Можно попробовать установить для параметра cache значение false:

$.ajax({
    url: '/controller/action',
    type: 'GET',
    cache: false,
    success: function(result) {

    }
});

Эта опция заставит браузер не кэшировать запрос.


UPDATE:

На основе комментария вы можете добавить уникальную метку времени в URL, чтобы избежать проблем с кэшированием:

var d = new Date();
var myURL = 'http://myserver/controller/action?d=' + 
    d.getDate() + 
    d.getHours() + 
    d.getMinutes() + 
    d.getMilliseconds();
3 голосов
/ 30 апреля 2013

Вы можете использовать HttpMethod = "POST" в своих AjaxOptions

var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv",  HttpMethod = "POST"};

как этот опыт;

@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv",  HttpMethod = "POST"})
0 голосов
/ 03 августа 2017

на самом деле в браузере IE кеширование не очищается автоматически. но в chrome скрипты рабочие принимаются. так что нужно попробовать очистка данных на уровне браузера.

0 голосов
/ 16 ноября 2016

Если вы используете Ajax Helper, вы можете установить для параметра AllowCache значение false следующим образом:

@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles",
                 new { }, 
                 new AjaxOptions
                 {
                     AllowCache = false,
                 }) 

И IE не будет кэшировать результаты вызова.

0 голосов
/ 12 августа 2011

Я также нашел это очень полезным в аналогичной (но не идентичной) проблеме.

http://forums.asp.net/t/1681358.aspx/1?Disable+cache+in+Ajax+ActionLink+extension+method+in+asp+net+MVC

В основном убедитесь, что вы используете POST, а не GET в своих запросах.Это препятствует кешированию IE.

Например:

@Ajax.ActionLink ("Очистить контакты", MVC.Home.ClearContacts (), новые AjaxOptions {HttpMethod = "POST", UpdateTargetId = "targetDiv"}))

0 голосов
/ 30 сентября 2010

Я писал об исправлении проблемы с кешем IE для jQuery и клиентской библиотеки MS:

http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/

Надеюсь, это поможет!

...