zoukankan      html  css  js  c++  java
  • MVC3中的视图文件

      在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";
    }
    <br />@("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的代码只是一行就够了

    <br/> @("ViewStart.cshtml")

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

    <br/>@("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该在的都在的话,一个请求过来,服务器的处理如下

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

  • 相关阅读:
    WINCE串口打印信息的屏蔽与打开
    WINCE系统时间设置
    WINCE调试常见错误
    今天开始研究arcgisserver
    今天开始,放弃项目管理,做技术了
    java数据库连接
    [转]建一个XMLHttpRequest对象池
    Linux下jsp开发环境,apache,tomcat服务器配置过程
    div+css布局漫谈
    新图纸总结
  • 原文地址:https://www.cnblogs.com/HopeGi/p/3111513.html
Copyright © 2011-2022 走看看