【问题标题】:jquery ui dialog caching on form loadjquery ui对话框缓存表单加载
【发布时间】:2011-12-29 03:54:41
【问题描述】:

使用 ASP.NET MVC3 (Razor) 我有一个加载 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,看起来像这样......

public virtual ActionResult FileUpload() { return new 部分视图结果(); }

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

我已经在 close() 和 .remove() 上尝试过 'destroy' 方法。两者都没有效果。我还确认每次单击#button2 时都会调用 open()。

关于如何防止对话内容被缓存的任何想法?

【问题讨论】:

    标签: jquery asp.net-mvc-3 razor jquery-ui-dialog


    【解决方案1】:

    您可以将此添加到您的全局 js 代码中,以防止 IE 缓存 ajax 请求:

    $.ajaxSetup({ cache: false });
    

    【讨论】:

    • 感谢您的所有回答。一切都是正确的,但我将此标记为我需要的答案 b/c 它解决了全球层面的问题。
    • FYI 来自文档:“如果设置为 false,它将强制浏览器不缓存请求的页面。将缓存设置为 false 还会附加一个查询字符串参数,“_=[TIMESTAMP]” , 到 URL。”见此链接:api.jquery.com/jQuery.ajax
    【解决方案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);
        }
    });
    

    【讨论】:

      【解决方案3】:

      添加属性 [无缓存] 到您的控制器操作以解决此问题。这只发生在 IE 中

      【讨论】:

      • 实际上,我在某些移动浏览器和某些桌面浏览器的某些条件下也看到了这一点。 :-/
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多