Asp.Net MVC:基于cookie的用户自选视图引擎实现2010-05-20 博客园 Leven在我以前的文章中详细介绍了目前mvc框架中的视图引擎管理,这个视图引擎可以方便的实现系统多视图引擎的管理,让系统可以轻松更好视图引擎,但是,在一些应用,比如bbs,多用户blog中,往往需要提供用户自选skin的功能,比如bbs中某个用户通过菜单可以随意更换自己的skin设置,而mvc框架的默认视图管理器对这个要求就无法做到了,而本文则是使用viewengine规则来实现一个用户自选视图引擎的功能.在本系统中,用户选择的skin信息将保存在cookie中,这意味着可以让用户控制这个选择保存的时间.首先,这个系统仍然是基于ViewEngine,我们在以前的文章中可以看到,mvc框架用一个AutoViewEngine来管理存在的所有ViewEngine,那么我们也可以考虑用一个SelectViewEngine来管理一系列我们特定的可选择ViewEngine.下面先看看这个核心部分的类:

从图中可以看到,这儿我们提供了一个新的接口ISelectViewEngine,它在普通的ViewEngine上添加了一个新的Name属性,该属性标示着唯一的视图引擎名称,然后我们对WebFormViewEngine进行封装,并实现ISelectViewEngine接口:Code
public SelectWebFormViewEngine(string name) {
Name = name;
MasterLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.master",
"~/skins/" + Name + "/shared/{0}.master"
};
ViewLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.aspx",
"~/skins/" + Name + "/{1}/{0}.ascx",
"~/skins/" + Name + "/shared/{0}.aspx",
"~/skins/" + Name + "/shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}