生成一个MVC模型在多个视图中使用
问题描述:
我对MVC和ASP.NET的概念相当陌生,我想知道是否有可能创建一次我的模型的对象并在整个不同的环境中使用它观点。生成一个MVC模型在多个视图中使用
我正在写通过包含的所有信息来填充Web服务调用获取一个JSON对象的应用程序。 Web服务调用需要一个ID创造合适的JSON对象。由于JSON对象是相当大的Web服务调用需要大约2秒下载JSON对象。当切换生成的模型视图(包括下载JSON对象的)每一次,这增加了一个巨大的开销。
为不同视图生成不同视图模型不起作用,因为下载是瓶颈。
任何想法如何解决这个问题?下载的JSON字符串可以存储在不同的视图中吗?如果ID更改,是否可以只下载JSON对象?
问候
答
沿着这些路线的东西会工作:
public ActionResult MyView(int someId)
{
string json = this.GetJson(someId);
var model = new MyViewModel(json);
return this.View(model);
}
private string GetJson(int id)
{
string cacheKey = "myJsonCacheKey" + id;
string cachedJson = this.HttpContext.Cache[cacheKey] as string;
if (cachedJson != null)
return cachedJson;
string actualJson = new WebClient().DownloadString("http://whatever");
this.HttpContext.Cache.Insert(cacheKey, actualJson);
return actualJson;
}
仅有2点要注意:
- 记住要执行相应的线程安全机制
- 您可以使用任何其他缓存提供商,而不是
HttpContext.Cache
,代码将是非常相似
+0
非常感谢Holden!这种方法极大地改善了我的工具的性能。很好的答案。 – ftramnitzke
您可以将它存储在会话中 – Rob
您可以使用MemoryCache来存储模型(使用ID作为键)并调用一个控制器方法来检查它是否存在,如果没有,则调用服务返回它(并将其添加到'MemoryCache') –