「編集」リンクを持つユーザーの簡単なリストを想像してみてください。[編集]をクリックすると、選択したユーザーの詳細を示すダイアログボックスが開きます。「詳細」ポップアップは部分的なビューです。
JQueryダイアログウィンドウで部分ビューを開くと、部分ビューがキャッシュされるという問題があります。
私の部分的なビュー(キャッシュの問題を解決しようとしたものの1つとして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(content)には近づかないようにしたいと思います。.load()よりもはるかに遅いように思えます。