Jquery-ui对话框iframe +后退按钮=灾难

时间:2011-08-19 18:50:31

标签: jquery jquery-ui

我不知道从哪里开始这个,获得修复的可能性大概是1万分之一,但问题是:我在页面上有“编辑”或“添加”类的元素。它们每个都有一个名为“edit”或“add”的自定义属性,我用它来传递ID。单击其中一个时,我使用以下函数打开一个带有iframe的jquery-ui对话框,其中src基于上面提到的ID。问题是,比如我在PAGE1上,然后点击EDIT123。然后我转到PAGE2并单击EDIT234。一切正常。但是,当我按下后退按钮时,它将我带回PAGE1,无论我点击它,它总是打开EDIT123。奇怪的是,如果你设置断点,你可以清楚地看到URL和相应的iframesrc是正确的。它始终会打开您在PAGE1上点击的最后一件事,无论在最初加载PAGE1或您在PAGE2时它正确打开了多少东西。

编辑:我忘了提及,如果你回击然后点击一个ADD按钮,它仍然会打开最后一个编辑页面......

<script language="javascript" type="text/javascript">

$(document).ready(function () {


    var date = new Date();

    //catch a click on an item with the class "edit" open modal div.
    $('.Edit').live('click', function () {
        var thing = $(this).attr('edit')
        var date = new Date();
        var url = 'edit/' + thing + '.aspx?appid=' + $('.lblAppID').html() + '&value=' + $(this).attr('entityid') + '&' + date.getTime();
        var iframesrc = $('<iframe width="100%" height="100%" marginwidth="0" marginheight="0" frameborder="0" src="' + url + '" scrolling="auto" title="Dialog Title"></iframe>');
        $('#modalDiv').dialog("option", "title", "Loading...").empty().append(iframesrc).dialog('open');
        return false;
    });


    //catch a click on an item with the class "add" open modal div.
    $('.add').live('click', function () {
        var thing = $(this).attr('add')
        var url = 'add/' + thing + '.aspx?appid=' + $('.lblAppID').html() + '&' + date.getTime();
        var iframesrc = $('<iframe width="100%" height="100%" marginwidth="0" marginheight="0" frameborder="0" src="' + url + '" scrolling="auto" title="Dialog Title"></iframe>');
        $('#modalDiv').dialog("option", "title", "Loading...").empty().append(iframesrc).dialog('open');
        iframesrc.history.next();
        return false;
    });

});
</script>

<div id="modalDiv"></div>

EDIT2 我只是在我的母版页代码隐藏中设置以下代码以禁用所有缓存。当我点击它时,显然它实际上重新加载了所有内容......但问题仍然存在。 :batshitcrazy:

    HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1))
    HttpContext.Current.Response.Cache.SetValidUntilExpires(False)
    HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
    HttpContext.Current.Response.Cache.SetNoStore()

EDIT3 还将其添加到主js文件

$(window).bind('unload', function () {
    jQuery.cache = {};
    alert('clearing cache');
});

每次我离开页面,向后或向前,我都会收到警报。问题仍然存在。

2 个答案:

答案 0 :(得分:0)

我不确定为什么在AJAX时你需要一个iframe,但这听起来像历史管理问题。

这可能有所帮助:Current state of Jquery history/back-button plugins?

答案 1 :(得分:0)

我给iframe一个当前时间戳的ID,现在它工作正常......不知道为什么我有这些奇怪的缓存问题。