最近项目中加了一个通用模块,就是根据一些特殊的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 }