我在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)。