因为某个项目需求,要实现模板更换相关功能,开始考虑简单实现,采用不同的Style来改变外观。后来想了想为了考虑以后扩展,将使用类是主题包那样,允许采用不同的视图,用过MVC我们知道可以通过指定不同的视图来处理结果,本人对于MVC3没有系统的学习,就是实践占大部分,都是遇到问题时查资料,问题就是这样的,所以我google到了博客园的一个页面。感谢这位网友的无私奉献,他给了我启发,能给了一个解决问题方法和思路,只是我感觉可能,应该还有其他的方法,或者更简洁,更合适的,尝试拼凑了几个英文单词,继续google,果然在stackoverflow我找到了一些个问答1,问答2。看到第一个问答,经过一番尝试后,问题总算解决。这里就分享一下也是做个记录。
方法都差不多需要继承一个类然后再根据我们的需要重写,这里我用的MVC3和Razor模板引擎,查看了MVC3的源码”RazorViewEngine.cs”:
所以我们只需要新建一个类继承这个RazorViewEngine类,其实都差不多,只不过是前面网友继承的 BuildManagerViewEngine ,这里还可以少些一些代码,像我这里只是需要增加几个路径方便主题的处理。

其中我添加了2条路径,分别是页面视图和模板视图。
然后还需要在应用程序启动时指定使用这个视图引擎”Global.asax”

基本上就这样,使用时只需要在调用View(“viewName”)返回视图时,查询数据库得到处理后的viewName。其他再根据需求补充。
Note
1.默认的Views文件夹下有个Web.config文件,其他目录同样也需要复制一份,不然可能会在运行时出现编译错误。
2.同理如果是用.aspx作为模板的话,那么可以实现“WebFormViewEngine”这个类,一些默认参数可下载MVC框架源码查看。
其中发现找了一些弯路,之前是因为访问不了默认目录”Views”里面的样式文件,还以为是因为框架限制原因,后来发现是在该目录下面的Web.config里配置<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>捣的鬼,不过多花了点时间,但原因和问题都搞清楚了,也算是一种收获吧,特别是有些问题找不到满意的答案,就可以尝试用英文在google搜索,一般都能找到些线索,像一些虽比较新的技术,其事很多问题都有了前车之鉴,即便问题可能不同,但也会找到一些蜘丝马迹,举一反三啊。总之要英语好,再养成良好的学习和查找资料的习惯。