jQuery UI Dialog в IE7 не вызывает контроллер ASP.Net MVC после первого раза - PullRequest
0 голосов
/ 17 февраля 2011

Мы разрабатываем приложение в ASP.Net MVC 3, используя jQuery UI Dialog.

Это наш общий код диалога:

var $loading = $('<img src="' + srcLoadingImage + '" alt="loading">');

$(aElement).each(function () {
    var $dialog = $(divTarget)
            .append($loading.clone());

    var $link = $(this).click(function () {
        $dialog
                    .load($link.attr('href'))
                    .dialog({
                        modal: true,
                        title: $link.attr('title'),
                        width: 350,
                        height: 240
                    });

        $link.click(function () {
            $dialog.dialog('open');

            return false;
        });

        return false;
    });
});

который мы так называем ..

$(document).ready(function () {
    RTC.Utils.aDialog('#selectAccount', '<div class="span-9"></div>', '@Url.Content("~/Content/images/loading.gif")');
});

Проблема, с которой мы сталкиваемся, заключается в том, что в Firefox все работает отлично, но в IE7 контроллер вызывается только при первом обращении к нему. После этого, похоже, используется оригинальная версия.

Вам нужно вручную уничтожить диалоговое окно для правильной работы IE7? Есть какие-нибудь указатели на то, как я это сделаю?

- ОБНОВЛЕНИЕ -

Мы удалили One () согласно предложению Аммуры, но у нас все еще остается та же проблема.

Мы также попытались добавить close: function (ev, ui) {$ (this) .dialog ("destroy"); } после высоты в диалоге ({но без эффекта.

Спасибо

Шейн

Ответы [ 4 ]

1 голос
/ 17 февраля 2011

Вы пытались отключить кэширование в опциях jQuery ajax?

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

GET-запросы ($ dialog.load (..)) могут кэшироваться любым браузером, и Internet Explorer обычно это делает.

1 голос
/ 17 февраля 2011

Вы можете указать jquery не кэшировать ajax-запросы, как показывает ответ Джеймса Х.Я никогда не был фанатом этого, поскольку jquery добавит бессмысленный аргумент в запрос GET.Это кажется хакерским и, возможно, даже склонным к ошибкам для меня.

Я обнаружил, что добавление [OutputCache(Duration=0)] к рассматриваемому действию работает для меня.Это вызывает истинный GET для каждого вызова AJAX.В моем случае я никогда не хочу, чтобы этот вызов когда-либо кэшировался, так как данные часто меняются.

0 голосов
/ 19 мая 2011
.load($link.attr('href') + ($link.attr('href').indexOf("?") == -1 ? "?" : "&") + "random=" + Math.random())

Я уверен, что это может работать.

0 голосов
/ 17 февраля 2011

Если, вызывая контроллер только один раз, вы обращаетесь к строке $dialog.load($link.attr('href')), тогда это имеет смысл, поскольку вы завернули ее в обработчик one . Это будет когда-либо выполняться только один раз, а затем отсоединять себя, поэтому он не будет загружать этот контент при последующих вызовах. Если вы ссылаетесь на другой вызов контроллера, вам может потребоваться опубликовать больше кода.

...