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项目上, ...
随机推荐
- 如何优雅的退出/关闭/重启gunicorn进程
在工作中,会发现gunicorn启动的web服务,无论怎么使用kill -9 进程号都是无法杀死gunicorn,经过我一番百度和谷歌,发现想要删除gunicorn进程其实很简单. 1. 寻找mast ...
- make -C M=
http://blog.sina.com.cn/s/blog_89fa41ef0100trjr.html Makefile:PWD = $(shell pwd)KERNEL_SRC = /usr/sr ...
- EXCEL行倒叙
- 6. EM算法-高斯混合模型GMM+Lasso详细代码实现
1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...
- [转]关于setInterval只执行一次的原因
原文地址:https://blog.csdn.net/skyblacktoday/article/details/79374613 我在做一个demo的时候发现的,之前可能遇到过到时没有记住,也没有写 ...
- Creating a Physical Standby Database 11g
1.Environment Item Primary database standby database Platform Redhat 5.4 Redhat 5.4 Hostname gc1 gc2 ...
- 为什么页面设计宽度要控制在960px
其实这里涉及到了一个网页栅格系统的问题,而且这个观念是从苹果的设计师那里来的 网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live ...
- [openssl]openssl特定版本安装
卸载旧版本 OpenSSL1. apt-get purge openssl2. rm -rf /etc/ssl #删除配置文件编译与安装 OpenSSLprefix 是安装目录,openssldir ...
- 【C】——C利用回调函数实现多态
案例: 功能:可以根据用户输入的命令完成相应的功能: 例如: 用户输入 hello 完成输出 hello的功能. 用户输入 hi 完成输出 hi 的功能. 一般的写法可能会写两个函数 ...
- 【oneday_onepage】——Ten Changes To Make A Difference In Your Life
When you want to change something in your life, it can feel overwhelming. Whether it’s losing 50lbs ...