JQuery UI диалог кэширования при загрузке формы - PullRequest
1 голос
/ 15 ноября 2011

В 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 и выглядит так ...

публичный виртуальный ActionResult FileUpload () {вернуть новый PartialViewResult (); }

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

Я пробовал метод уничтожения в close (), а также .remove (). Ни один не имеет эффекта. Я также подтвердил, что open () вызывается каждый раз при нажатии кнопки button2.

Есть какие-нибудь идеи о том, как сохранить содержимое диалога от кэширования?

Ответы [ 4 ]

5 голосов
/ 15 ноября 2011

Вы можете добавить это в свой глобальный js-код, чтобы IE никогда не кэшировал ajax-запрос:

$.ajaxSetup({ cache: false });
2 голосов
/ 15 ноября 2011

Вы можете заменить:

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

на:

$.ajax({
    url: '@Url.Action(MVC.FileUpload.FileUpload())',
    cache: false,
    context: this,
    success: function(result) {
        $(this).html(result);
    }
});
1 голос
/ 15 ноября 2011

Добавьте атрибут [NoCache] В действие контроллера, чтобы устранить эту проблему.Это происходит только в IE

0 голосов
/ 15 ноября 2011

Добавить случайный параметр или временную метку к URL-адресу для загрузки.Например:

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