【问题标题】:How to configure kendo dropdown list to use cache?如何配置剑道下拉列表以使用缓存?
【发布时间】:2017-03-09 04:39:50
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

答案与剑道无关。如果您使用的是 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>

【讨论】:

  • OutputCacheAttribute 应该触发客户端缓存。它基本上告诉浏览器在第一个请求“像这样缓存”,然后在后续请求中,客户端将遵循第一个请求提供的“指令”并且不会发出请求(如果由第一个请求缓存指令指示) )。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2017-03-24
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多