我们正在使用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”);在对话框中的高度之后({但没有效果。
谢谢,
沙恩
答案 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())
我相信它可行。