IE缓存从服务器返回的旧数据



我在ASP.NET MVC视图上有一个Wijmo树。每个树节点的检查状态都保存在我的数据库中。加载树时,会根据返回的数据检查或取消检查每个节点。当树上的nodeCheckChanged被调用时,我使用ajax在我的控制器上调用一个操作,该操作成功地更改了我的数据。

当我重新加载树视图时,问题就出现了。数据已保存在数据库中,但浏览器不会从服务器获取最新数据。

我只在IE所有版本中遇到这个问题。Firefox和Chrome每次都能正常工作。

我看过DotNetPerls和微软的这样的页面,并尝试了这个stackoverflow答案的选项四。

我发现在IE中获取最新数据的唯一方法是将选项"开发人员工具"->"缓存"->"始终从服务器刷新"设置为true。

我需要做什么才能让IE像其他浏览器一样重新加载我的数据?

感谢大家花时间阅读这个问题!

编辑

我的树的数据来自我的模型上的一个集合。此集合由一个操作填充。

我的行动:

public ActionResult List(AssignedFolderListModel model)
{
//Using EntityFramework
model.TopLevelFolders = db.Folders;
return PartialView(model);
}

我的型号:

public class AssignedFolderListModel
{
public string UserId { get; set; }
public IEnumerable<Folder> TopLevelFolders { get; set; }
public Guid[] AssignedFolderIds { get; set; }
}

回答

我需要在$.ajax调用中添加"cache:false"。每次都对同一个url进行$.ajax调用。例如"AssignedFolder/List?UserId=12345"。IE没有再次调用,而是返回了一个缓存的结果。

现在IE每次都被迫返回最新的数据。

IE缓存所有的get-你需要对请求做一些事情来欺骗IE不要缓存它。通过jQuery.ajax调用,你可以在调用上设置"cache:false"(这只是为请求的URL添加一个随机的时间戳)-在树上寻找关于这样做的配置选项,或者一个钩子,您可以在其中操作用于从服务器重新加载数据的URL(并将您自己的时间戳添加到请求的URL)。

最新更新