2011-11-15 39 views
1

与ASP.NET MVC3(Razor)我有一个简单的页面,加载一个jQuery UI对话框。在窗体加载jquery ui对话框缓存

@{ 
    ViewBag.Title = "Home Page"; 
} 
<h2>yo</h2> 
<div id="fileUpload"> 
</div> 
<button id="button2"> 
    Upload file 
</button> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#button2').click(function() { 
      $fileUpload = $('#fileUpload'); 
      $fileUpload.dialog({ 
       minWidth: 500, 
       minHeight: 100, 
       title: 'Upload File(s)', 
       autoOpen: true, 
       buttons: { 
        'Upload': function() { 
         $('form').submit(); 
        }, 
        'Cancel': function() { 
         $(this).dialog('close'); 
        } 
       }, 
       open: function (event, ui) { 
        $(this).load('@Url.Action(MVC.FileUpload.FileUpload())'); 
       }, 
       close: function (event, ui) { 
        $(this).dialog('destroy'); 
        //$(this).remove(); 
       }, 
       dialogClass: 'no-close', 
       closeText: '', 
       modal: true 
      }); 
     }); 
    }); 
</script> 

关于open()方法的注意事项会调用控制器方法。它返回一个PartialView,看起来像这样...

公共虚拟的ActionResult文件上传(){返回新 PartialViewResult(); }

我遇到的问题是IE浏览器缓存对局部视图的调用。如果我更新了局部视图,那么在我清除浏览器缓存之前它不会加载。

我试过close()以及.remove()方法上的'destroy'方法。没有效果。我也确认open()每次被点击#button2时被调用。

有关如何保持对话内容不被缓存的任何想法?

回答

5

您可以将它添加到您的全局js代码,以防止IE从以往缓存Ajax请求:

$.ajaxSetup({ cache: false }); 
+0

感谢您的所有答案。所有这些都是正确的,但我将其标记为我需要的答案,它在全球范围内解决了这个问题。 –

+0

仅供参考来自文档:“如果设置为false,它将强制请求的页面不被浏览器缓存。将缓存设置为false还会将查询字符串参数”_ = [TIMESTAMP]“附加到URL。看到这个链接:http://api.jquery.com/jQuery.ajax/ – Joshua

0

附加一个随机参数或时间戳到要加载的URL。例如:

var timestamp = new Date().getTime(); 
$(this).load('@Url.Action(MVC.FileUpload.FileUpload())'+'&t='+timestamp); 
1

添加属性 [NoCache的] 到控制器的行动来解决这个问题。这种情况只有在IE

+1

其实我在某些移动浏览器以及其他桌面浏览器的某些条件下也看到了这一点。 : -/ – Joshua

2

您可以取代:

$(this).load('@Url.Action(MVC.FileUpload.FileUpload())'); 

有:

$.ajax({ 
    url: '@Url.Action(MVC.FileUpload.FileUpload())', 
    cache: false, 
    context: this, 
    success: function(result) { 
     $(this).html(result); 
    } 
});