博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC3中的视图文件
阅读量:7025 次
发布时间:2019-06-28

本文共 1973 字,大约阅读时间需要 6 分钟。

  在MVC3中的视图部分,Razor视图引擎是与以往不同的地方之一,使用Razor的视图文件再也不是以往的ASPX文件了,是cshtml文件,在新建视图的时候也会发现增加多了几类文件

由上到下分别是

  •          MVC 3 Layout Page:与原来Web Form的Master母版页一样。文件名一般以下划线“_”开头
  •          MVC 3 Partial Page:用于定义用户控件的。文件名一般以下划线“_”开头。
  •          MVC 3 View Page:普通的View页面。
  •          MVC 3 View Page with Layout:使用某个Layout页面的View,与原本WebForm中使用母版页的页面一样。

上面两项文件的文件名默认是以下划线开头的“_”,不过在MVC 3中有几个带有下划线开头的文件比较特殊

  • _AppStart.cshtml
  • _PageStart.cshtml
  • _ViewStart.cshtml

  这几个文件在整个请求响应流程中发挥着一些特殊的效果。这些文件都不能够被请求(即使控制器的行为定义好了、路由也定义好了,都不行),但行为定义好的路由定义好而不能访问的页面也不知这几个,作为Layout的页面里万一用了@RenderBody()就不允许被请求了。当然感觉这样做钻牛角尖了。

分别看一下上面几个特殊的文件的介绍

 

_AppStart.cshtml

执行时机:在程序启动的时候执行,但晚于全局文件Global.asax里面的Application_Start事件执行。

作用:用于进行App的初始化时,需要进行处理的内容,但是由于其所处于的作用域跟Application_Start所处的不同。所以它能作出一些Application_Start做不出的事。

注意:此文件一定要位于根目录才会生效,否则不会执行。

这里就列举一下

_AppStart.cshtml

@{    this.App.StartMessage = "测试_AppStart.cshtml";}
@("applicationstart")

 

TestPage.cshtml

@{    ViewBag.Title = "123ABCD";    if(!string.IsNullOrEmpty( App.StartMessage))    {    Response.Write(App.StartMessage);}    }

这里的App属于动态属性,VS的自动提示不起作用,要想知道是什么就只能上官网了,ViewBag都是这样。

同时从结果都可以看出@("applicationstart")并没有执行,只是执行了@{}这部分。

 

_ViewStart.cshtml

执行时机:单个View处理Request时执行,晚于_AppStart.cshtml执行

作用:与Web Form中的Page_Load类似,不过Web Form的Page_Load只能作用于一个页面,这个_ViewStart.cshtml能作用于它所在的目录及子目录中所有视图。如果子目录中也有_ViewStart.cshtml的话,先从最顶级的执行,才逐级执行到子级里头。不过如果行为方法返回的不是View(),而是PartialView()的话,这个_ViewStart就不会执行了。

 

下面也给一个例子,多个_ViewStart一齐使用的

 

文件结构如下

外面的_viewStart.cshtml的代码只是一行就够了

@("ViewStart.cshtml")

System目录下的_viewStart.cshtml的代码也只有一行

@("SystemViewStart")

运行结果如下

 

_PageStart.cshtml

传闻这个是跟_ViewStart.cshtml一样效果

这个文件呢!我没法作介绍了,因为我用Visual Studio2010的,在这个环境下建了文件没有执行,一直在苦恼中,在谷歌上找,有不少说明的,都说_AppStart.cshtml执行完毕之后就会执行_PageStart.cshtml,但无论怎样就是不执行,就算是按照别人的例子放置文件,粘别人的代码还是不行。后来看了一些鸡肠文章,好像_PageStart.cshtml不是在VS用的,在WebMatrix下面用的,看了一篇文章是说由WebMatrix转到VS的,那堆文件中,转换前是_PageStart.cshtml,转换后是_ViewStart.cshtml。

 

最后综合一下,如果_AppStart.cshtml,_PageStart.cshtml,_ViewStart.cshtml该在的都在的话,一个请求过来,服务器的处理如下

 

由于个人认识尚浅,故上面有什么说错的说漏的还请各位指出,谢谢!

转载地址:http://sjsxl.baihongyu.com/

你可能感兴趣的文章
Linux中Firefox——Firebug插件安装及使用
查看>>
[leetcode]Valid Sudoku
查看>>
android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码
查看>>
webpack-dev-server的刷新模式inline和iframe详解
查看>>
滴滴开源基于 RocketMQ 的分布式消息队列 DDMQ
查看>>
云服务器ecs企业版快速入门概述
查看>>
洛谷 P1854 花店橱窗布置
查看>>
晓羊教育获新东方、华创资本领投近1.5亿元人民币B轮融资 打造基础教育信息化大数据新生态 ...
查看>>
史上最详细阿里云服务器搭建及域名申请攻略
查看>>
阿里云表格存储TableStore全新升级 打造统一在线数据存储平台 ...
查看>>
「镁客·请讲」中芯芯片陈智维:国内芯片没有创新可言,但大家做的是从无到有 ...
查看>>
【直播预告】阿里技术专家天樵:基于JVM的脚本语言开发、运用实践
查看>>
第二十章:异步和文件I/O.(十八)
查看>>
win10应用程序添加到开机启动项的两种解决办法
查看>>
一招教你无阻塞读写Golang channel
查看>>
阿里有群姑娘,是马老师的师兄,还是逍遥子的学长……
查看>>
Docker 在 Coding WebIDE 项目中的运用
查看>>
ATtiny85 制作迷你小游戏机
查看>>
jQuery限制“Text-Area”域中的字符的个数
查看>>
bboss框架配置监控介绍
查看>>