2017-03-27 28 views
1

我有一個主要的着陸頁面(初始頁面),其中我需要進行服務調用。該模型的值將幫助我確定顯示另一個頁面/操作與否。asp.net mvc - 在操作中重複使用控制器值

可以選擇一個場景,查看日期如果它在過去,我將顯示一個新的頁面/動作「ReviewData」,它只在同一個控制器.cs類中。如果該日期將來,我將顯示另一個頁面/操作「摘要」,它也使用相同的.cs控制器類。

現在,如果我去「ReviewData」,我需要與前面提到的相同的服務調用數據。我不想隨時撥打此服務電話,因爲所有這些嘗試都具有相同的價值。我如何避免這種情況,並可能重用第一次服務調用中的數據/模型值?

+0

拜託你給的代碼示例 –

+0

緩存模型在控制器定製不是MVC是如何設計的。它被設計爲能夠[通過輸出緩存提高性能](https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/improving-performance -with輸出緩存-CS)。 –

+0

但我仍然覺得再次進行相同的服務調用,即使在兩種不同的操作下,也能在應用程序中多次獲取相同的數據,這是不值得的,不是嗎?我在同一個控制器類下有兩個動作。產生服務響應數據的一個動作,爲什麼不能在另一個動作中重用它,而沒有進行相同的服務調用?是使用參數來實現的嗎? – Aravind

回答

0

您在這裏需要一些緩存方略是簡單的緩存的輔助類

using System.Runtime.Caching; 

public class cacheservice: ICacheservice 
{ 
    public T GetOrSet<T>(string cacheKey, Func<T> getItemCallback) where T : class 
    { 
     T item = MemoryCache.Default.Get(cacheKey) as T; 
     if (item == null) 
     { 
      item = getItemCallback(); 
      MemoryCache.Default.Add(cacheKey, item, DateTime.Now.AddMinutes(10)); 
     } 
     return item; 
    } 
} 

interface ICacheService 
{ 
    T GetOrSet<T>(string cacheKey, Func<T> getItemCallback) where T : class; 
} 

用法:

cacheservice.GetOrSet("CACHEKEY", (delegate method if cache is empty)); 

緩存提供商將檢查該名字有什麼緩存中的「CACHEKEY」,如果不存在,它將調用委託方法來獲取數據並將其存儲在緩存中。

例子:

var Data=cacheService.GetOrSet("CACHEKEY",()=>SomeRepository.GetData()) 

您可以根據自己的需要,以及

+0

我的歉意。我可能是這個主題的初學者,但作爲asp.net經典世界的很長時間的開發人員,我仍然不確信所選擇的選項。爲什麼MVC框架不具備像我的場景那樣的能力?或者我還沒有獲得有關在MVC上可以實現的基礎知識?如果我需要避免多個Web服務調用並利用後續需求的值,除了會話,緩存(這是另一個商店或多或少像我的情況下的會話),還有什麼其他選項。你會詳細說明還是幫助我瞭解一些關於這些主題的鏈接/源代碼,尤其是關於asp.net MVC的內容? – Aravind

+0

哦,沒有問題,我可以理解你的擔憂,但是當我們使用MVC創建應用程序時出現的情況是性能,你的場景與性能問題類似?如果你發現如何提高MVC應用程序的性能,那麼世界上有很多文章,但是你會發現一個常見的事情是** CACHING **,儘管MVC提供了使用OutputCache的內置緩存,但它不適合你的需求,所以你需要工作一些緩存策略 – Curiousdev

+0

這裏是一些有用的鏈接[1](http://www.trigent.com/blog/so-you-want-to-improve-performance-of-asp-net -mvc4-application /),[2](https:// dzone。com/articles/how-improvement-performance),[3](http://codeclimber.net.nz/archive/2009/04/17/how-to-improve-the-performances-of-aspnet-mvc-web - 應用/),[4](https://www.codeproject.com/Articles/41930/How-To-Improve-the-Performance-of-ASP-NET-MVC-Web)鏈接是**緩存**我希望你會滿足和實施一些緩存策略爲您的應用程序;-) – Curiousdev

相關問題