2012-07-17 31 views
1

想象一下帶有「編輯」鏈接的簡單用戶列表。點擊「編輯」打開一個對話框,其中包含所選用戶的詳細信息。 「細節」彈出窗口是局部視圖。將部分視圖加載到JQuery對話框中緩存問題

我在使用JQuery對話窗口打開部分視圖時遇到了部分視圖緩存問題。

我的局部視圖(注意的OutputCache屬性作爲的事情之一我試圖解決緩存問題):

[HttpGet] 
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
    public PartialViewResult EditUser(int id) 
    { 
    var userList = userRepository.GetByRole(id); 

    return PartialView("EditUser",userList); 
    } 

的PartialView上述請求,然後從以下Javascript函數加載:

function editUserOpen(id) { 

    $.ajaxSetup({ ///// Another thing I tried to solve caching 
     cache: false 
    }); 

    var url = "/User/PartialViewResult/" + id; 

    $('#user-wrap').empty().load(url, function() { 

    $("#dialog-edit-user").dialog({ 
     title: "Edit User", 
     autoOpen: false, 
     height: 300, 
     width: 500, 
     modal: true 
    }); 

     $('#dialog-edit-user').dialog("open"); 
    }); 
} 

如上所示,「dialog-edit-user」(以及「dialog-add-user」和「dialog-delete-user」)位於DOM中的「user-wrap」Div的內部。

功能上一切正常,但是當我打開一個對話框時,取消並嘗試打開其他用戶的對話框,直到頁面刷新爲止,對話框將始終包含來自最初顯示的對話框的信息。 我想到了它的緩存問題,但我跑出瞭解決方法。

如果可能,我想遠離$ .ajax({cache:false;})。html(內容)。在我看來,它比.load()慢很多。

+0

檢查此文章:http://stackoverflow.com/questions/168963/stop-jquery-load-response-from-being-cached – Chandu 2012-07-17 18:01:52

+0

看看上面的Javascript功能。建議已經實施,或者我沒有正確實施它? – Shenaniganz 2012-07-17 18:03:42

+0

錯過了..... – Chandu 2012-07-17 18:05:42

回答

5

這是我發現的。

每次JQuery對話框都使用.dialog()進行初始化,如上圖所示,div變爲彈出窗口,正在從DOM中移出並移動頁面的底部。 Dialog Div不能成爲其他Div的子項。在我的例子中是:

<div id="user-wrap"> 
    <div id="dialog-edit-user"> /// <--- Jquery dialog div 

    </div> 
</div> 

對話框不能被包裝在其他div。

第一次單擊後,當顯示對話框時,JQuery只是在頁面底部開始累積重複的Div。 $("#").dialog('open')打開每次使程序員/用戶認爲這是一個緩存問題累積重複的頂部DIV。

所以解決的辦法就是無論是從頁面的底部去除.dialog({close: }事件的jQuery產生的股利或將其與jQuery .append()/.appendTo()功能搬回到父母的包裝DIV。

希望這有助於遇到類似問題的下一位程序員。

+0

這解決了我們的問題。謝謝你救了我的一天;) – 2015-08-18 09:58:27

0

添加一些隨機哈希的URL以保持其獨特之處:

... 
var url = "/User/PartialViewResult/" + id + "?t=" + new Date().getTime(); 
... 

這將始終加載新的內容。

+0

不幸運。我可以在Fiddler中看到一個新值正在添加到URL中,並且每次都會觸發部分視圖中的中斷點,但當呈現頁面時,同一頁面會一遍又一遍地顯示,直到頁面刷新。 – Shenaniganz 2012-07-17 18:16:55

+0

您不會在任何地方更改$ .dialog內容。你需要用來自ajax的數據填充$(「#dialog-edit-user」),然後在其上創建一個對話框。現在你將數據放入$('#user-wrap'),對話框不會改變,這就是爲什麼它不起作用。 – 2012-07-17 21:19:14