asp.net mvc中应用缓存依赖文件(xml)的一个小demo

时间:2023-03-08 17:45:29

最近项目中加了一个通用模块,就是根据一些特殊的tag,然后根据处理这些tag在同一个视图中加载不同的model(个人觉得此功能无任何意义,只是把不同的代码放在了同一个View中)。

我的处理思路是这样的,首先将所有的tag放置在xml文件中,然后根据action中传入的tag和xml中的tag对比进而向view中传入不同的数据。为了避免频繁的文件IO,故将遍历xml所有tag之后的结果(集合)进行了缓存,以后的每次请求只通过比对缓存来做处理。不过首次请求是数据并没有缓存,所以要做一下小小的处理。进入简单的代码吧:

  public ActionResult ViewMore(string _type)
{
if (!string.IsNullOrEmpty(_type))
{
ViewMore form = new ViewMore();
List<string> list = new List<string>();
var query = HttpRuntime.Cache["Items"] as List<string>;
if (query == null || query.Count == )
{
XElement xElement = XElement.Load(Server.MapPath("/Content/ViewMore.xml"));
var query_ = from elements in xElement.Elements("child")
select elements.Value;
if (query_.Count() > )
{
foreach (var v in query_)
{
list.Add(v.ToString());
}
HttpRuntime.Cache.Insert("Items", list, new CacheDependency(Server.MapPath("/Content/ViewMore.xml")));
}
else
return View();
}
if ((query != null && query.Contains(_type)) || list.Contains(_type))
{
materialIndex.Institutes = this._instituteService.FindAllInstitutes();
form.MateriaIndex = materialIndex;
form.MateriaIndex.Institutes = materialIndex.Institutes;
return View(form);
}
else
return View();
}
return View();
}