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

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

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

 1  public ActionResult ViewMore(string _type)
 2         {
 3             if (!string.IsNullOrEmpty(_type))
 4             {
 5                 ViewMore form = new ViewMore();
 6                 List<string> list = new List<string>();
 7                 var query = HttpRuntime.Cache["Items"] as List<string>;
 8                 if (query == null || query.Count == 0)
 9                 {
10                     XElement xElement = XElement.Load(Server.MapPath("/Content/ViewMore.xml"));
11                     var query_ = from elements in xElement.Elements("child")
12                                  select elements.Value;
13                     if (query_.Count() > 0)
14                     {
15                         foreach (var v in query_)
16                         {
17                             list.Add(v.ToString());
18                         }
19                         HttpRuntime.Cache.Insert("Items", list, new CacheDependency(Server.MapPath("/Content/ViewMore.xml")));
20                     }
21                     else
22                         return View();
23                 }
24                 if ((query != null && query.Contains(_type)) || list.Contains(_type))
25                 {
26                     materialIndex.Institutes = this._instituteService.FindAllInstitutes();
27                     form.MateriaIndex = materialIndex;
28                     form.MateriaIndex.Institutes = materialIndex.Institutes;
29                     return View(form);
30                 }
31                 else
32                     return View();
33             }
34             return View();
35         }
View Code

 

posted @ 2013-12-19 16:17  Dupont  阅读(438)  评论(0编辑  收藏  举报