我有一个主登陆页面(初始页面),我需要在其中进行服务呼叫。该模型的值将帮助我确定是否显示另一个页面/操作。
让我们选择一个场景,如果它过去的日期,我会显示一个新的页面/动作" ReviewData"这只是在同一个控制器.cs类中。如果该日期是将来,我将展示另一页/行动"摘要"它也使用相同的.cs控制器类。
现在,如果我转到" ReviewData",我需要与之前制作的相同的服务呼叫数据。我不想时不时地拨打这个服务电话,因为所有这些都尝试了相同的价值。我该如何避免这种情况,并可能重用第一次服务电话中的数据/模型值?
答案 0 :(得分:0)
这里需要一些缓存stratergies是简单的缓存助手类
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())
您也可以根据自己的需要进行自定义
答案 1 :(得分:-1)
问题的答案: - 可以重用第一次服务呼叫中的数据/模型值吗? - 是的 您可以使用Tempdata:https://msdn.microsoft.com/en-us/library/system.web.mvc.tempdatadictionary.aspx
来实现此目的