IE7中的jQuery UI Dialog第一次没有调用ASP.Net MVC控制器

时间:2011-02-16 23:13:09

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

我们正在使用jQuery UI Dialog在ASP.Net MVC 3中开发一个应用程序。

这是我们的通用对话框代码:

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的对话框才能正常工作?关于我如何做的任何指示?

- 更新 -

我们根据ammura的建议删除了One(),但我们仍然遇到同样的问题。

我们还尝试添加close:function(ev,ui){$(this).dialog(“destroy”);在对话框中的高度之后({但没有效果。

谢谢,

沙恩

4 个答案:

答案 0 :(得分:1)

您是否尝试在jQuery ajax选项中禁用缓存?

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

任何浏览器都可以缓存GET请求($ dialog.load(..)),而Internet Explorer往往会这样做。

答案 1 :(得分:1)

你可以告诉jquery不要缓存ajax请求,正如James H的回答所示。我从来都不喜欢这个,因为jquery会在GET请求中附加一个毫无意义的参数。它感觉很乱,甚至可能容易让我感到烦恼。

我发现将[OutputCache(Duration=0)]添加到相关操作中对我有用。它强制每个AJAX调用都有一个真正的GET。在我的情况下,我永远不希望这个调用被缓存,因为数据经常变化。

答案 2 :(得分:0)

如果仅通过调用控制器一次引用$dialog.load($link.attr('href'))行,那么这是有道理的,因为它将它包装在one处理程序中。这将只执行一次然后解除绑定,因此它不会在后续调用中获取此内容。如果您指的是另一个对控制器的调用,那么您可能需要发布更多代码。

答案 3 :(得分:0)

.load($link.attr('href') + ($link.attr('href').indexOf("?") == -1 ? "?" : "&") + "random=" + Math.random())

我相信它可行。