2016-03-01 88 views
0

我對MVC和ASP.NET的概念相當陌生,我想知道是否有可能創建一次我的模型的對象並在整個不同的環境中使用它觀點。生成一個MVC模型在多個視圖中使用

我正在寫通過包含的所有信息來填充Web服務調用獲取一個JSON對象的應用程序。 Web服務調用需要一個ID創造合適的JSON對象。由於JSON對象是相當大的Web服務調用需要大約2秒下載JSON對象。當切換生成的模型視圖(包括下載JSON對象的)每一次,這增加了一個巨大的開銷。

爲不同視圖生成不同視圖模型不起作用,因爲下載是瓶頸。

任何想法如何解決這個問題?下載的JSON字符串可以存儲在不同的視圖中嗎?如果ID更改,是否可以只下載JSON對象?

問候

+0

您可以將它存儲在會話中 – Rob

+1

您可以使用MemoryCache來存儲模型(使用ID作爲鍵)並調用一個控制器方法來檢查它是否存在,如果沒有,則調用服務返回它(並將其添加到'MemoryCache') –

回答

2

沿着這些路線的東西會工作:

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

相關問題