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. 【Shiro】六、Apache Shiro Session管理

    1.Session的介绍 关于Session 会话:从启动一个Session到关闭这个Session作为一个会话,是对客户端和服务器端交互的一种封装,带有时效性 会话的产生: 一般从容器中产生 Web ...

  2. Java学习之Static

    Static(静态)是一种修饰符,用于修饰成员(成员变量.成员函数) 1.静态方法只能访问静态成员. 2.静态随着类的加载而加载 通过代码分析: class PersonDemo { public s ...

  3. rsa加密解密pfx证书转pem文件

    openssl 转化文件命令X509转PFX:openssl pkcs12 -export -inkey test.key -in test.cer -out test.pfxPFX转X509:ope ...

  4. 慎用margin系列1---CSS的margin塌陷(collapse) 问题与对策

      对于以下简单代码: 如果您认为应该是这样的话: 那就错了.结果是这样的: 因为CSS中存在一个margin collapse,即边界塌陷或者说边界重叠.对于上下两个并列的div块而言,上面div的 ...

  5. Spring Data JPA查询关联数据

    1. Query方式@Query("select s from Store s join fetch s.products where s.user.id = :user_id") ...

  6. Zabbix Server 和 Zabbix Agentd 开机自动运行

    Zabbix Server 和 Zabbix Agentd 开机自动运行 请问:怎样 Zabbix Server 和 Zabbix Agentd 开机自动运行? 注:如果你的命令行写进了 /etc/r ...

  7. [轉]关于CR0.WP

    关于CR0.WP 我们知道CR0的WP位可以关闭内核写保护.他和页表的R/W位有关.Intel手册中的描述绕来绕去似乎一直没有说到重点. When the processor is in superv ...

  8. 【WPF】一些拖拽实现方法的总结(Window,UserControl)

    原文:[WPF]一些拖拽实现方法的总结(Window,UserControl) 原文地址 https://www.cnblogs.com/younShieh/p/10811456.html 前文 本文 ...

  9. window 下搭建流媒体服务器ffmpeg nginx-rmtp-module

    媒体介绍和需要下载需要软件 1.FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp 2.ng ...

  10. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...