2010-04-16 4 views
16

Internet Explorer의 페이지에 문제가 있습니다. 컨트롤러에서 전달하고 올바르게 데이터를로드하는 링크를 클릭하면 다른 브라우저에서 양식을 호출하는 ajax 호출이 있습니다. 하지만 IE에서, 한 번로드되면, 그것은 내게 컨트롤러에서 전달하지 않고 같은 오래된 결과를 가져온다.Internet Explorer 캐싱 asp.netmvc 아약스 결과

+0

[IE8에서 AJAX 결과의 예상치 못한 캐싱] 가능한 복제본 (http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8) –

답변

23

시도 :

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

이 속성, 컨트롤러 클래스에 배치되어 캐싱을 비활성화합니다. 내 응용 프로그램에서 캐싱을 필요로하지 않기 때문에, 나는 나의 BaseController 클래스에 배치 : Improving Performance with Output Caching

당신은 너무 행동에 배치 할 수 있습니다 :

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

여기 OutputCacheAttribute에 대한 좋은 설명입니다.

+0

캐싱은 IE에서만 발생하기 때문에 문제가되지 않습니다. –

+2

@Malcolm Frexner : 캐싱 전략은 브라우저마다 다릅니다. IE에는 몇 가지 문제가 있습니다. – LukLed

9

당신은 falsecache 옵션을 설정을 시도 할 수 :

$.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(); 
+0

글쎄, Microsoft jQuery가 아니라 Ajax. ;)이 설정은 모든 Ajax 기반 호출에 적용됩니까? msAjax도? –

+0

죄송합니다. 질문에 대한 중요한 부분을 놓쳤습니다. –

+2

jQuery를 사용하는 경우 정답 인만큼 upvoting입니다. 사실 MVC에서 MS Ajax 처리기가 아니라 jQuery를 사용하는 경우 IE는 메서드에 설정 한 모든 특성을 완전히 무시합니다. – James

0

이와 비슷한 (동일하지는 않은) 문제에 대해서도 매우 유용합니다.

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

은 기본적으로 귀하의 요청에 GET 반대로 당신이 POST를 사용하고 있는지 확인하십시오. 그렇게하면 IE가 캐싱되지 못하는 것 같습니다.

예 :

Ajax.ActionLink @

("클리어 연락처", MVC.Home.ClearContacts(), 새로운 AjaxOptions {HttpMethod = "POST", UpdateTargetId = "targetDiv"})

3

당신이 할 수있는 귀하의 AjaxOptions에 HttpMethod = "POST"을 사용하십시오.

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

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

을 그리고 IE는 호출의 결과를 캐시하지 않습니다 당신이 아약스 도우미를 사용하는 경우

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

, 당신은이 같은 falseAllowCache 매개 변수를 설정할 수 있습니다.

0

IE 브라우저에서 실제로 캐싱이 자동으로 해제되지 않습니다. 하지만 크롬 스크립트가 허용됩니다. 브라우저 수준에서 데이터를 지우려면 을 시도해야합니다.