Кэширование Internet Explorer asp.netmvc ajax results

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

Ответ 1

Try:

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

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

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

Вот хорошее описание OutputCacheAttribute: Повышение производительности с кэшем вывода

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

Ответ 2

Вы можете попробовать установить 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

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

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

как этот exp;

@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv",  HttpMethod = "POST"})

Ответ 5

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

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" })

Ответ 6

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

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

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

Ответ 7

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