我的应用程序有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每次都会调用服务器来获取结果。
我的问题是如何启用客户端缓存,以便在第一次调用后不会有任何服务器调用。
答案 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>