【发布时间】:2015-10-23 04:45:52
【问题描述】:
我正在显示基于数据库查询的表。 ajax 请求用于从表中获取数据,将其序列化为 json,并通过在前端使用 datatables JavaScript 库来更新数据。
我需要能够将该表输出到 Excel。这需要采用非常特定的格式,我已经在 C# 中编写了正确工作的类等。我还有一个控制器,它将传回一个文件流,以便用户下载文件。
我的问题是关于缓存数据库中的数据。我不想回到数据库并重新运行查询,然后将报告传递给我的 excel 导出器,它应该以某种方式存储 - 用户运行的最新报告。
我可以想到两种方法:
1) 客户端缓存 - 存储用户运行的最新报表,然后让 excel 导出器使用缓存中的最新报表数据。
2) 发回来自 Ajax 调用的最新 json 响应,并在控制器中反序列化回报告对象。
第一个似乎是最合乎逻辑的,因为第二个看起来很混乱且容易出错。我想知道这是否是最好的解决方案,如果不是最好的方法的建议。
【问题讨论】:
-
我会在您的控制器操作中以 OutputCacheAttribute 开头。
-
@Jasen 谢谢,我对此仍然有些困惑。这种缓存方法似乎只是缓存特定的控制器,但我并不真正关心那个控制器,因为它是通过 ajax 调用并返回 JSON。我希望数据库和服务返回的对象(报表对象列表)在缓存中,这仍然可能吗?
-
它会缓存一个动作结果。因此,在缓存过期或失效之前,后续请求不会命中数据库。如果您的 C# 代码被编写为使用对象结果,则 OutputCache 可能不合适。
标签: c# ajax asp.net-mvc-4 caching