• Razor的主版页面框架


    类似于2.0版本中的MasterPage主版页面框架,不过mvc3.0推出的RazorView内建的主版页面语法与原本的webFormview的MasterPage相差甚远

     
    1,Razor的页面执行顺序
    当controller 回传ViewResult给MvcHandler(用mh代替)之后,mh会先设法找到对应的检视页面view,当找到了对应的razor页面之后,会进入页面执行生命周期,在Razor页面的执行过程中有个固定的执行顺序。
    被mh找到的razor页面会优先执行,执行完毕后,会检查这个view页面是否含有主版页面所需要的Layout属性,如果有的话便试图载入Layout属性指定的Razor主版页面,找到主版页面后悔开始将内容响应给用户端,
     
    在过去的MasterPage中,执行的时候会先找到ContentPlaceHolder控制项,并将之前主要页面的执行结果填入后输出到用户端eg<标签asp: ContentPlaceHolder ID="MainContent" runat="server"/>
     
    实务上:在沟通的时候会把MasterPage定义为一个区块的动作戏称为“挖洞”,也就是在MasterPage里挖了一个洞,然后由主要页面的内容填入。
    在razor里当主版页面被载入后,执行的过程也一样,在razor主版页面里也会定义出一些需要被填入的的内容(挖洞),然后让主要页面的内容填入。
     
     
    2,关于_Layout主版页面。
    预设的Views/Shared/_Layout.cshtml文件其实和一般的razor检视页面差不多,同样是razor语法,但不同的地方是有两个Razor语法,分别是@RenderBody,@RenderSection这两段声明,就是所谓的挖洞宣言
    @RenderBody()在主版页面中可视为“预设挖洞”,也就是主要的View页面在没有特别声明的情况下,所有内容都会被填入到@RenderBody()这个位置。
    @RenderSection在Razor主版页面中被视为“具名坑洞”,
    @RenderSection(“featured”,required:false)意思就是我们在主版页面中定义一个叫featured的坑洞,第二个是required具名参数则是声明这个坑洞是否必须被填满,如果在主版页面设定的具名坑洞把required参数设定为true的话,那么所有载入这个主版页面的view页面都必须输出想对应的内容,否则就会发生状况。
     
    注意:由于razor页面有其执行顺序,主要是先执行view再执行Layout主版页面,因为view与layout共用一个viewDataDictionary实体,因此,如果要将数据传递到layout页面中一样可以通过viewData或者viewBag的方式传递过去,但是千万别以为可以从layout传数据回view页面,因为执行顺序是不一样的。
  • 相关阅读:
    curl crt
    test with nmap
    C#查询XML解决“需要命名空间管理器”问题
    Dapper实用教程
    javascript 计算两个日期的差值
    Glib学习笔记(二)
    安装osquery笔记
    Golang多线程简单斗地主
    PHP扩展开发之Zephir
    zabbix 安装记录
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4597672.html
Copyright © 2020-2023  润新知