刚刚爱上MVC3.0,几个不眠夜的学习越来越有趣。今天随手尝试自定义Mvc3.0的视图引擎,虽然已成功,但是还发现有点小疑问。随手贴出来希望大家指教指教。

MVC的视图文件目录被固定/Views目录内,区域视图文件也是被固定在/Areas目录下,出于好奇和对目录名的敏感,尝试修改它。通过reflector找到视图引擎的构造接口类VirtualPathProviderViewEngine

在MVC2.0中,自定义自己的视图引擎,继承它即可,但在3.0中,我发现继承它会缺少一个函数。再reflector获得了BuildManagerViewEngine的抽象类,因为RazorViewEngine继承的是该抽象类。

所以最直接还是在自己的视图引擎中继承它。

public class myViewEngine : BuildManagerViewEngine{// Fieldsinternal static readonly string ViewStartFileName = "_ViewStart";// Methodspublic myViewEngine(): this(null){}public myViewEngine(IViewPageActivator viewPageActivator): base(viewPageActivator){base.AreaViewLocationFormats = new string[] { "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{2}/Views/{1}/{0}.vbhtml", "~/Areas/{2}/Views/Shared/{0}.cshtml", "~/Areas/{2}/Views/Shared/{0}.vbhtml" };base.AreaMasterLocationFormats = new string[] { "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{2}/Views/{1}/{0}.vbhtml", "~/Areas/{2}/Views/Shared/{0}.cshtml", "~/Areas/{2}/Views/Shared/{0}.vbhtml" };base.AreaPartialViewLocationFormats = new string[] { "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{2}/Views/{1}/{0}.vbhtml", "~/Areas/{2}/Views/Shared/{0}.cshtml", "~/Areas/{2}/Views/Shared/{0}.vbhtml" };base.ViewLocationFormats = new string[] { "~/T/{1}/{0}.cshtml",  "~/T/Shared/{0}.cshtml" };base.MasterLocationFormats = new string[] { "~/T/{1}/{0}.cshtml",  "~/T/Shared/{0}.cshtml" };base.PartialViewLocationFormats = new string[] { "~/T/{1}/{0}.cshtml",  "~/T/Shared/{0}.cshtml" };base.FileExtensions = new string[] { "cshtml", "vbhtml" };}protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath){string layoutPath = null;bool runViewStartPages = false;IEnumerable<string> fileExtensions = base.FileExtensions;return new RazorView(controllerContext, partialPath, layoutPath, runViewStartPages, fileExtensions, base.ViewPageActivator);}protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath){string layoutPath = masterPath;bool runViewStartPages = true;IEnumerable<string> fileExtensions = base.FileExtensions;return new RazorView(controllerContext, viewPath, layoutPath, runViewStartPages, fileExtensions, base.ViewPageActivator);}}

上面是原Razor视图引擎的构造类,我只是拷贝下来修改修改我希望的目录结构,比如将原Views目录改成了T,然后在程序初始化的时候,注册加入这个自己的视图引擎类。

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new myViewEngine());

将项目中Views目录改名T,调试成功。这样,以后的目录结构我们自己可以任意定义。非常方便。

但是,有人可能会说那6个目录定义属性都是public的,可以直接调出来修改,结果我也这样试过,没成功,无论我直接调用RazorViewEngine封装,还是VirtualPathProviderViewEngine继承后为属性设定值。都没成功,可能我的方法有问题。 如果你知道,希望可以告诉我。

另外这样自定义目录结构后,在View和Controller之间不能定位了,VS环境还是认为Views目录是视图文件目录,自己定义的T目录没有了“脚手架”...

一起谈.NET技术,也玩MVC3.0 Razor自定义视图引擎来修改默认的Views目录结构相关推荐

  1. MVC3.0 Razor实现Ajax数据分页

    数据分页一只是一个老生常谈的问题,只要是做系统开发,一般都会牵扯到.最新学习了Razor,用到分页功能,分享下如何实现Ajax分页. 1.准备工作 网上有现成的分页工具MVCPager,最新的是1.5 ...

  2. 大数据技术之_01_Linux学习_01_linux的入门+VM和linux的安装+linux的目录结构+远程登录到linux服务器+vi和vim编辑器+开机、重启和用户登录注销+用户管理+用户组管理

    大数据学习之_01_Linux学习_01 1 linux的入门 1.1 Linux的介绍 2 VM和linux的安装 2.1 安装vm和Centos 2.1.1 基本说明 2.1.2 CentOS安装 ...

  3. 一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案

    通过好友CallHot介绍Lodopweb打印控件.由于是国人开发的,故这两天认真了研究下,打算在未来的项目中使用.现将学习成果与园友分享.如果存在不足的地方,希望您指出. 具体的实现步骤如下: 一. ...

  4. 一起谈.NET技术,ASP.NET2.0服务器控件之类型转换器

    类型转换器是实现自定义服务器控件属性过程中比较重要的内容.本文将对类型转换器的基本概念和实现方法进行介绍. 1. 类型转换器基本概念 类型转换器是自定义服务器控件的辅助性功能实现.它主要用于执行从字符 ...

  5. 一起谈.NET技术,NHibernate 3.0.0.Alpha1 发布及新特性介绍

    发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你 ...

  6. Android 9.0 禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现

    目录 1.概述 2.禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现的核心类

  7. 一起谈.NET技术,在ASP.NET MVC3 中利用JSONP跨域登录WEB系统

    在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就 ...

  8. 一起谈.NET技术,ASP.NET MVC3 Service Location

    介绍 ASP.NET MVC3 的一个重要的新特性就是允许注册一个服务点 Service Location,然后在框架中使用的能力.以前版本的 MVC 已经提供了 Service Location 和 ...

  9. 开学季,复旦老师教你玩转“0”“1”浪漫!| 人物志

    受访者 | 戴开宇 采访者 | 伍杏玲 出品 | 程序人生(ID:coder_life) 近日,华为招聘 8 位顶尖应届博士生制定的薪资方案引起热议,2019 届应届博士生年薪 89.6 万起步,最高 ...

最新文章

  1. uber_这就是我本可以免费骑Uber的方式
  2. Java中BigDecimal工具类(支持空值运算版)
  3. 阿里云数据库RDS环境搭建
  4. 超详细的redis总结
  5. Linux内核源码树建立加载hello模块
  6. css3中的多列布局columns详解
  7. Oracle——17概要文件
  8. oracle clob 回车换行问题
  9. linux1到10累加,10个有趣的 Linux 命令
  10. 查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析
  11. 帆软分组合并字符串、提取字符串中的数字、判断多项字符串至少一项被包含
  12. 关于联想LJ2655DN出现open the frontcover then replace the toner的解决方法
  13. 领导者核心能力七力模型
  14. uart通信协议详解
  15. java 伊甸园_离伊甸园仅一步之遥
  16. C# 根据主机名称获得IP
  17. win10用计算机分区,win10电脑硬盘要不要分区
  18. 三分钟让闲置电脑变云主机
  19. 抖音表情包引流转化教程之淘宝客新玩法,轻松3w+
  20. 使用老毛桃制作U盘启动盘

热门文章

  1. AI当道,媒体会被机器牵着鼻子走?
  2. AI+医疗:基于模型的医疗应用大规模分析 | 腾讯AI Lab学术论坛演讲
  3. 人工智能如何驱动实体经济?六大领域展望
  4. 做木匠、开烘焙店、写科幻小说,那些选择转行的开发者们…
  5. 没有项目经验也能进大厂??
  6. 迷惑行为赏析:把 jpg 图片加密后卖了 247 万
  7. 去了两家外包公司,颠覆了我的认知!
  8. 听说做前后端的都是这个体会? | 每日趣闻
  9. 林丹退役,用 Python 看看大家怎么说?
  10. Java设计模式之五大创建型模式(附实例和详解)