MVC3中,使用Razor模板引擎的话,会自动生成一个_ViewStart.cshtml文件。

很多人把这个文件当成类似Webform中的Master模板文件,其实这个_ViewStart.cshtml文件和模板文件没有任何关系,要说有关系,也仅仅是默认生成的时候,里面有一个语句

Layout = "~/Views/Shared/_Layout.cshtml";

其实这句话才是和模板有点关系的。

事实上,_Viewstart.cshtml的作用是在呈现View文件的时候的启动文件,无论哪个视图,当你要呈现这个视图的之前,_Viewstart.cshtml中的代码总会被先执行,正如把它的名字命名为_Viewstart哪样,这是Razor引擎故意设计的,因此如果项目中所有的视图都要包含某些公共逻辑,比如设置Layout = "~/Views/Shared/_Layout.cshtml";这样的语句,只需在_Viewstart.cshtml写一遍就可以了。

注意,是在View被呈现的时候才会调用_Viewstart.cshtml,如果一个View是按照PartialView的方式输出的,则不会触发_Viewstart.cshtml中的代码。

举个例子。

假设在_Viewstart.cshtml中有如下代码:

  1. @{
  2. Layout = "~/Views/Shared/_Layout.cshtml";
  3. @Html.Raw("Hello")
  4. }
  5. <div>World</div>

--------------------------------------

访问Home/ViewUserControl1调用的Action方法如下:

  1. public ActionResult ViewUserControl1()
  2. {
  3. return View();
  4. }

此方法返回ViewUserControl1视图。注意:当View方法参数为空的时候,默认是使用当前的action名字,即会去找ViewUserControl1.cshtml的View。

如果方法改为如下:

  1. public ActionResult ViewUserControl1()
  2. {
  3. return PartialView();
  4. }

则_Viewstart.cshtml中的代码不会被执行,因此写的Layout = "~/Views/Shared/_Layout.cshtml";之类的代码也不会被执行,返回的就是单纯的一个Partial View。

如果在View的Home目录下也有一个同名的_ViewStart.cshtml文件,那么这个_ViewStart也会被调用,但是会最先调用的还是最外面的_ViewStart,然后再是Home目录下的_ViewStart。

例如:Home目录下的_ViewStart.cshtml文件内容为:

  1. @{
  2. @Html.Raw("<b>_ViewStart.cshtml in home</b>");
  3. }

则当呈现ViewUserControl1得到的结果如下:

至于_ViewStart.cshtml为何前面要加'_'符号,可以参考文章http://cnn237111.blog.51cto.com/2359144/81470

MVC3中_ViewStart.cshtml的一些事的更多相关文章

  1. MVC中的_viewstart.cshtml(没有设置Layout却引用了布局)

    今天Home视图中新增了一个视图,因为不需要设置Layout就没与管他,但是运行起来一看,自动引用了布局,分析了半天 也没看出是哪的错误? 后来尝试着在area中增加了一个同样的视图就没有问题,比较这 ...

  2. ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項

    ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項 3/24 TW MVC第一次活動圓滿的結束了,雖然是RC,但也來了不少願意聽我們分享的好朋友. ...

  3. ASP.NET MVC3 在_ViewStart设置Layout使用RenderAction的注意事項

    来源:https://dotblogs.com.tw/lastsecret/archive/2012/03/26/71052.aspx ASP.NET MVC3 在_ViewStart設定Layout ...

  4. Razor引擎中的_ViewStart.cshtml

    Startup Code是在所有View执行之前加载和执行的代码. 在Razor引擎中的_ViewStart.cshtml 就是装载这些“预执行代码”的文件,它有两个特点: 一.就是所有View执行之 ...

  5. ASP.NET MVC中的 _ViewStart.cshtml文件的作用【摘抄】

    ViewStart 在前面的例子中,每一个视图都是使用Layout 属性来指定它的布局.如果多个视图使用同一个布局,就会产生冗余,并且很难维护. _ViewStart.cshtml 页面可用来消除这种 ...

  6. _appstart.cshtml,_pagestart.cshtml,_viewstart.cshtml

    ASP.NET MVC3 系列教程 – Web Pages 1.0 I:Web Pages 1.0中以"_"开头的特别文件(文件命名时不区分大小写) "_appstart ...

  7. MVC中 _ViewStart _Layout Index三个页面中的加载顺序

    MVC学习中忽然想到一个问题.. 在访问一个Index.cshtml页面时, MVC的加载顺序是怎么样的呢? 首先说下我的结论 . _ViewStart.cshtml . Index.cshtml . ...

  8. PartialViewResult不鸟_ViewStart.cshtml

    概述 在ASP.NET MVC中,对于Action中得到的ActionResult如果是一个ViewResult对象,那么在进行View呈现时,则会先执行_ViewStart.cshtml,然后再去执 ...

  9. MVC3中 ViewBag、ViewData和TempData的使用和区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

随机推荐

  1. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】01、环境准备

    开发环境 windows+STS(一个针对Spring优化的Eclipse版本)+Maven+SQLServer 环境部署 1.安装SQLServer(使用版本2008R2) 自行安装,此处略过 2. ...

  2. springmvc缓存 - cache

    前几篇文章已经搭建了一个基本的springmvc demo,现在我们来完善下.    相信大家写程序的时候都接触过缓存的概念,也都知道,数据量大的时候缓存对于提高效率是很显著的.而缓存一般包括前台静态 ...

  3. nginx安装教程(详细)

    所见即所得编辑器, editorhtml{cursor:text;*cursor:auto} img,input,textarea{cursor:default}.cke_editable{curso ...

  4. python学习笔记:循环语句——while、for

    python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...

  5. IOU计算python实现

    def compute_iou(rec1, rec2): """ computing IoU :param rec1: (y0, x0, y1, x1), which r ...

  6. SpringBoot2.0拦截器 与 1.X版本拦截器 的实现

    1.5  版本 先写个拦截器,跟xml配置方式一样,然后将拦截器加入spring容器管理 .接着创建 配置文件类 继承 WebMvcConfigurerAdapter 类,重写父类方法addInter ...

  7. UVA

    A network is composed of N computers connected by N - 1 communication links such that any two comput ...

  8. Springboot+mybatis+dbcp+mysql简单集成

    1.添加依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>m ...

  9. 【linux】centos6/7 + nginx 利用certbot 申请https证书

    没错我又踩坑了.昨晚上搞到十二点半才成功申请.鬼知道OJ服务器是个什么渣渣. 早上才算正式弄好,中间也学了不少东西,记录一下.这次是http转https,所以默认的还是只有80端口. 请务必确保自己的 ...

  10. 自定义DbUtils通用类

    本实例使用C3P0连接池做连接,详见https://www.cnblogs.com/qf123/p/10097662.html开源连接池C3P0的使用 DBUtils.java package com ...