修改MVC视图默认搜索规则(IViewEngine)
前几天我自己在写一个系统,写到后台管理系统的时候,我突然有个想法就是:想在区域视图下新建文件,单独处理后台一些业务:Area/AdminManager/View/Content/Index.cshtml;这么一个路径,我刚建完就发现有点不对了,因为根据mvc默认的规则就是ControllerName/ViewName,所以我不管怎么新建文件夹,视图 都是在ManagerController控制下,换言之,到达浏览器的地址是这样的:Area/Manager/Index 而不是我们心中的:Area/AdminManager/Content/Index
好,有人想到了一种解决方案了:那就是修改路由;
的确,我也想到了这种方法。预示我就在区域视图下修改路由:
context.MapRoute(
"Managercontent",
"manager/{controller}/{action}/{id}",
new{action = "default",id=UrlParameter.Optional}
);
然后在controllers文件夹中新建一个专门处理后台某块业务的控制器——ContentController
然后运行,结果还是曝黄页,显示的内容是404,没有找到指定路径下的视图文件,我看了黄页的内容,是这样的
未找到“XXX”视图,...搜索了以下位置:
~/Area/AdminManage/Views/Content/Welcome.cshtml
~/Area/AdminManage/Views/Content/Welcome.vbhtml
~/Area/AdminManage/Views/Shared/Welcome.cshtml
~/Area/AdminManage/Views/Shared/Welcome.vbhtml
~/Views/Content/Welcome.cshtml
~/Views/Content/Welcome.vbhtml
~/Views/Shared/Welcome.cshtml
~/Views/Shared/Welcome.vbhtml
看到这个信息之后,我心中的想法就是:怎么mvc找的是这些指定的路径?怎么不去找我新建的~/Area/AdminManage/Views/Manage/Content/Welcome.cshtml
我研究了下规律,因为是区域,所以搜索视图前面的Area/AdminManage/Views/是固定的,后面的Content/Welcome.cshtml中的Content是控制器名称,welcome是action名称
那么也就是说mvc框架默认的查找视图的路径就是这样的,只在Views根目录下找,而不去找它的子目录,那么如何修改这个规则呢?mvc不是“约定优于配置”的嘛
肯定是跟试图引擎IViewEngine有关,我带着疑问去网上找资料,果然解决方案还是很多的,下面我参照网上的做法:
/// <summary>
/// 修改视图引擎搜索视图文件规则
/// </summary>
public sealed class MultipleEngineHelper : RazorViewEngine
{
public MultipleEngineHelper() {
ViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Areas/AdminManage/Views/Manage/{1}/{0}.cshtml",
};
} public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
return base.FindView(controllerContext, viewName, masterName, useCache);
}
}
光有这个还没用,还需要在Gloab添加注册
proteced void Application_Start(){
....
RegisterView();
}
private void RegisterView()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MultipleEngineHelper());
}
这样我们重新正常运行啦!
修改MVC视图默认搜索规则(IViewEngine)的更多相关文章
- 修改 mvc webapi 默认返回 json 格式
web api 默认的已 xml 格式返回数据 现在开发一般都是以 json 格式为主 下面配置让 webapi 默认返回 json ,在需要返回 xml 时只需要加一个查询参数 datatype=x ...
- 修改MVC默认的pageBaseType以添加功能
试想下在MVC的前端页面JS或者html中需要使用多语言,而后端的多语言是维护在资源文件中的,前端如果使用的话需要使用AJAX频繁的获取,一个页面中可能会存在大量的需要语言转换的地方,频繁使用AJAX ...
- ASP.NET MVC 视图(三)
ASP.NET MVC 视图(三) 前言 上篇对于Razor视图引擎和视图的类型做了大概的讲解,想必大家对视图的本身也有所了解,本篇将利用IoC框架对视图的实现进行依赖注入,在此过程过会让大家更了解的 ...
- ASP.NET MVC 视图(一)
ASP.NET MVC 视图(一) 前言 从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲 ...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- ASP.NET Core 入门笔记7,ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- ASP.NET MVC 视图(五)
ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就 ...
- ASP.NET MVC 视图(四)
ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到, ...
- MVC视图展现模式之移动布局解析-续集
网站就必须用响应式布局吗?MVC视图展现模式之移动布局:http://www.cnblogs.com/dunitian/p/5213787.html demo:http://pan.baidu.com ...
随机推荐
- 导出excle错误
导出excel时出现下面的错误: 类型“GridView”的控件“SimpleForm1_ContentPanel2_GVD_List”必须放在具有 runat=server 的窗体标记内. 可以在对 ...
- 使用css保持一定宽高比例
需求描述:移动端实现横跨页面半圆.(类似问题,实现4x4的正方形网格) 简化问题,我们可以理解为实现一个高度和宽度比为1:2的块. 需要解决问题: 1,高度和宽度按照一定比例. 2,外容器高度和宽度不 ...
- 网易云社区有奖问答活动第二期——技术领导力、深入分布式、PHP圣经、Linux运维、Unity……三月热点图书等你拿!
网易云社区第二期有奖问答活动开始了!(第一期活动已结束:人工智能图书大抽奖!) 欢迎积极参与网易云社区,讨论问题,交流心得.我们本期准备了一批技术领域热点图书,送给参与社区的朋友们,将以抽奖的形式送出 ...
- 【BZOJ3238】[AHOI2013]差异
[BZOJ3238][AHOI2013]差异 题面 给定字符串\(S\),令\(T_i\)表示以它从第\(i\)个字符开始的后缀.求 \[ \sum_{1\leq i<j\leq n}len(T ...
- CentOS7下 Python2.7.5升级为Python2.7.13
参考:https://www.jianshu.com/p/fad3942fc0ed 第一步:查看Centos版本及Python版本 • CentOS版本 [root@ tools_package]# ...
- 微信小程序与vueJs的异同
简而言之,所有的框架都是建立在原生javascript基础之上的,所以对于有一定js基础的同学来说,各种框架都是比较容易入手的,但不同的框架之间又有一定的差别,有时候切换使用时就会掉入坑了. 一.微信 ...
- badboy录制网站出现css样式混乱,网页的图标点击没反应
本人在测试web工作过程中,遇到了标题一样的问题.苦恼很久也没有找到原因.后面自己摸索,发现了问题所在! badboy安装是2.2.5版本:ie最新版本: 原因:首次安装badboy的时候,所默认的浏 ...
- 《JAVA与模式》之建造模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation ...
- jdbc连接1(可以注入)
package demo3class; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa ...
- R软件常用命令
1.getwd() 获取默认的目录 2.> mydata <- read.csv("1.csv") 读取1.csv文件中的数据,并赋值给一个mydata的对 ...