如何配置kendo下拉列表以使用缓存?

时间:2016-10-26 17:30:02

标签: kendo-ui kendo-asp.net-mvc kendo-dropdown kendo-datasource

我的应用程序有kendo下拉列表来显示状态。状态下拉列表已用于多个视图。

@(Html.Kendo().DropDownListFor(m => m.BlankReturn.StateProvinceCode)
                .DataTextField("StateName")
                .DataValueField("StateCode")
                .DataSource(source =>
                {
                    source.Read(read =>
                    {
                        read.Action("GetStateProvinces", "Lookup");
                    });
                })                
            )

现在,此下拉列表的每个实例都会调用服务器来获取状态。我希望kendo仅在第一次调用时从服务器加载状态,但任何后续调用都需要从客户端缓存中获取状态。 我该如何配置?

UPDATE1
下面几个答案建议使用服务器端缓存。我一直在寻找客户端缓存。例如,jQuery的ajax方法将缓存GET方法结果(除非您明确禁用了缓存)。我假设Kendo正在使用jQuery在内部进行服务器调用。但是我想kendo正在禁用ajax缓存。所以kendo每次都会调用服务器来获取结果。 我的问题是如何启用客户端缓存,以便在第一次调用后不会有任何服务器调用。

1 个答案:

答案 0 :(得分:0)

答案与剑道无关。如果您正在使用MVC,那么您可以从System.Web.Cache加载状态集合,也可以使用.net MVC缓存方法属性。

使用全局缓存 - 将始终调用控制器,但是,如果在加载时缓存状态,则数据库往返次数会减少。

using System.Web;
public ActionResult GetStates()
{
    List<State> states=(List<State>)System.Web.HttpContext.Current.Cache["MY_STATES"];
    if(states==null)
    {
        states=myDataLayer.LoadStates();

        System.Web.HttpContext.Current.Cache.Insert(
              "MY_STATES", 
               states, 
               null, 
               System.Web.Caching.Cache.NoAbsoluteExpiration, 
               new TimeSpan(0,1440,0), 
               System.Web.Caching.CacheItemPriority.Normal, 
               null);         
    }
    return states;
}

MVC方法属性 - 设置浏览器缓存属性,并通过标头指示浏览器缓存特定时间。当关联的浏览器缓存尚未过期时,将不会有控制器调用。

[OutputCache(Duration = 86400)]
public ActionResult GetStates()
{
    return myDataLayer.LoadStates();
}

MVC方法属性 - 单一配置 - 设置浏览器缓存属性

[OutputCache(CacheProfile = "TypeTableCacheProfile")]
public ActionResult GetStates()
{
    return myDataLayer.LoadStates();
}

以及配置

  <system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <clear />
          <!-- 24 hours-->
          <add varyByParam="*" duration="86400" name="TypeTableCacheProfile" />          
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
 </system.web>
相关问题