asp.net mvc - 在操作之间重用控制器值

时间:2017-03-27 03:45:06

标签: c# asp.net-mvc

我有一个主登陆页面(初始页面),我需要在其中进行服务呼叫。该模型的值将帮助我确定是否显示另一个页面/操作。

让我们选择一个场景,如果它过去的日期,我会显示一个新的页面/动作" ReviewData"这只是在同一个控制器.cs类中。如果该日期是将来,我将展示另一页/行动"摘要"它也使用相同的.cs控制器类。

现在,如果我转到" ReviewData",我需要与之前制作的相同的服务呼叫数据。我不想时不时地拨打这个服务电话,因为所有这些都尝试了相同的价值。我该如何避免这种情况,并可能重用第一次服务电话中的数据/模型值?

2 个答案:

答案 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

来实现此目的