EF5+MVC4系列(10) mvc的布局页面 _ViewStart.Cshtml
当客户端请求 /Product/Index的时候, 如果在视图的根目录下有 _ViewStart.Cshtml 就会先执行这个,再去执行 Product文件夹下的Index视图, 如果Product文件夹下也有 _ViewStart.Cshtml文件,那么优先执行这个文件,再去执行 Index视图
根目录下的ViewStart中的数据,可以通过 Page.Title这样 或者是 PageData[“key”] 这样传递给 下面的Product下的ViewStart视图,直至到目标 Index视图
如果根目录下的ViewStart文件中指定了 LayOut为 默认视图的话

那么也就表示,后续的子视图,都会采用这个Layout属性,当然了,子视图也可以使用 Layout=null 来清除默认视图.
我们先去看看这个layout.cshtml默认视图

注释:
@RenderSection("scripts", required: false) 表示,在 父模板中,占了一个坑,这个坑是由子模板去填的,最后会把子模板中的数据,放到这里来.
@RenderBody 这是主要的坑,在子视图中的除了上面 RenderSection中的数据外的其他的代码,都会填在这里来.
下面我们回到 根目录下的 ViewStart.cshtml ,我们看看如何从 根目录下的这个视图,传递数据到最后的 Product下的 Index视图.并且看看,如果在根目录下的ViewStart.cshtml中有代码,并且在Product文件夹下的ViewStart也有代码,那么到最后的目标视图 index中也有代码, 这3种代码是如何排序的?
答案是,依次进行 比如 根Viewstart中有的代码,会排在 Product下的viewstart的前面,然后把这2者的代码,又会带到 目标Index视图的前面,最后,把这3者的代码,回填到ViewStart中指定的 layout.cshtml (默认视图) 里面的 RendyBody处 (如果在目标index中,有section节点,那么Section节点会回填到 layout.cshtml中的 RenderSection 处)
下面是流程图
1: 根目录下的 ViewStart.cshtml 指定了Layout 以及传递了 Page.name 这样一个值

2: Product文件夹下 ViewStart.cshtml .由于 Product下的ViewStart文件,并没有设置 Layout的值,那么这个时候,实际这个Layout值还是根目录下的ViewStart里面的Layout的值,相当于是直接继承了过来

3: 目标Product下的 Index.cshtml 视图文件. 这个目标页也没有设置layout属性,那么也就是表示,是直接从刚才的Product下的Viewstart中继承这个layout值.
我们index视图中发现有个 Section节点(名字为Scripts),那么这个节点,就会去回填给 默认的Layout中的那个名字为 Scripts的 Section坑
index视图,会继承 根目录下的ViewStart中的代码,还会继承product下的ViewStart的代码,最后加上除了刚才的Section节点中的内容的代码,这3者的总和,最后会回填给layout中的RendyBody这个坑.

4:最后回填之后 显示的效果

打开查看html源码,就能看到执行的顺序了

EF5+MVC4系列(10) mvc的布局页面 _ViewStart.Cshtml的更多相关文章
- MVC学习五:Razor布局页面 _ViewStart.cshtml
如图: _ViewStart.cshtml就是MVC中的布局页面/模板页面. 用户访问流程图: 原理:先去执行Views文件夹下[_ViewStart.cshtml]页面,然后同级目录文件夹(上图中的 ...
- EF5+MVC4系列(12) 在主视图中直接用RenderAction调用子Action,并返回视图(Return View)或者分部视图(Return PartialView); 从主Action传值到子Action使用TempData传值;TempData高级用法
结论: ViewData 适用于 在一次请求中 传递数据 . 比如我们从 主Action 到 主视图, 然后在 主视图中 用 RenderAction 请求子Action的时候,就是算作 一次请求 ...
- EF5+MVC4系列(11)在主视图中用Html.RenderPartial调用分部视图(ViewDate传值);在主视图中按钮用ajax调用子action并在子action中使用return PartialView返回分布视图(return view ,return PartialView区别)
一:主视图中使用Html.RenderPartial来调用子视图(注意,这里是直接调用子视图,而没有去调用子Action ) 在没有使用母版页的主视图中(也就是设置了layout为null的视图中), ...
- MVC,布局页面
一>>> 在_ViewStart.cshtml文件中,加入: @{ Layout = "~/Views/Shared/_Layout.cshtml"; PageD ...
- ASP.NET MVC教程八:_ViewStart.cshtml
一.引言 _ViewStart.cshtml是在ASP.NET MVC 3.0及更高版本以后出现的,用Razor模板引擎新建项目后,Views目录下面会出现一个这样的文件: 打开_ViewStart. ...
- EF5+MVC4系列(8) ActionResult的返回值
我们在MVC的代码中,经常会看到这样的一个 代码 可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢? 其实这个View方法的返回值的类型是ActionResul ...
- EF5+MVC4系列(9) Razor视图引擎的核心原理;@符号的使用;输出html的转义
一:Razor视图引擎的核心原理 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项 ,他是一个视图引擎 他的核心原理,就是当读取到 @符号的时候,就认为这是开始 ...
- EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))
一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...
- EF5+MVC4系列(6) 简单三层的搭配(泛型) 实现 增删改查
1:项目结构 2:每层添加对其他层的引用,这里我们把除了Web层之外的所有的层生成的文件都放到解决方案下的Library文件夹下,然后每个项目分别来引用里面的dll项目文件. 我们在Model项目上, ...
随机推荐
- 【ARM】AD转换器
A/D转换器 A/D转换器,又称模/数转换器,顾名思义,就是把模拟信号数字化. 由于系统的实际处理对象往往都是一些模拟量(如温度.压力.位移.图像等),要使计算机或数字仪表能识别和处理这些信号,必须首 ...
- Django服务端读取excel文件并且传输到接口
path_name = "opboss_download_" + str(int(time.time())) + ".csv" print(path_name) ...
- 关于Python中深拷贝与浅拷贝的理解(一)---概念
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...
- 【Linux】crontab 每隔1小时 2小时的执行job写法
crontab -l crontab -e 每五分钟执行 */5 * * * * 每小时执行 0 * * * * 每2小时执行 0 */2 * * * 每天执行 0 0 ...
- iOS开发如何在一个透明视图上添加不透明的子控件
相信很多同学都会遇到过这个问题, 当我们弹出一个半透明的遮盖层时, 又想在遮盖层上加一些子视图, 这个时候如果你的遮盖层设置了alpha属性, 你会惊讶的发现, 加载遮盖层上的所有子控件都是透明了, ...
- MAMP和WAMP搭建Web环境,数据库,数据分布可视化
MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...
- 1:(0or1)
public class User { public int ID { get; set; } public string UserName { get; set; } ...
- [Linux实用工具]Linux监控工具munin的安装和配置
〇.摘要 munin是用于Linux系统(也可以监控windows系统)的监控软件.munin除了可以监控系统的各项数值之外,最大的好处是可以自己编写插件自定义监控需要的数值.整个系统的架构简单明了, ...
- Objective的宏到swift中该怎么办?
ReadMehtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { ...
- InstallShield卸载状态
uninstallaing() 它对应于-unistall 命令,在installshield 2009及之前的版本,在控制面板中选择"uninstall”会触发这个命令.但在install ...