有意义的参考:http://www.asp.net/web-pages/tutorials/working-with-pages/3-creating-a-consistent-look

Asp.net是怎样解决Consistent Layout问题的?是通过引入以下几个概念并提供相应的机制解决的:

  • Content Blocks,内容块,是包含html内容的文件,可以“插入”到其他页面中,一般不能直接访问,类似于Web Form中用户控件的概念;
  • Layout Pages,布局页面,是包含html内容的页面,可以在其中“插入”其他页面,也就是其内容可被“被插入的页面”共享,类似于Web Form中Master Page的概念;
  • Content Page,一般页面,可在其中使用RenderPage("content blcok文件路径")“插入”Content Block,可以使用@Layout="Layout page路径"引用Layout Page(如果Content Page页面同级或上级文件夹中存在_ViewStart.cshtml页面,则Content Page会继承该页面,该页面中一般会使用@Layout指令引用Layout页面),该页面在Layout Page页面出现的位置即Layout Page页面中RenderBody(Layout Page中只能定义一个RenderBody方法)方法出现的位置;
  • PartialView:

以上是MVC Layout机制的几个概念,在这几个概念中,Content Page是出于主动位置的,也就是说Content Page可以决定引用还是不引用、引用哪个Layout Page,Content Page(和Layout Page)可以决定是否定义Content Block,以及引用哪个Content Block。这些概念的应用依赖于以下方法:

  • RenderPage方法用于将Content Block"插入"到的其他页面,在其他页面中希望插入Content Block的位置调用RenderPage("content block文件路径")方法;
  • RenderBody方法用于在Layout pages中定义Content Page的位置;
  • Layout Pages页面中除了可以定义静态的被其他页面共享的内容之外,还可以预定义一些区域,其内容可以由引用该Layout Page的Content Page页面自行定义。方法是:在Layout Page页面通过调用RenderSection定义此由Content Page页面实现的区域,每个区域都有一个唯一的名称,通过在Content Page中使用@Section来定义该区域的具体内容。举例如下:
     在Layout page 中使用:
    @RenderSection("header", required: false)
    或者:
    @if (IsSectionDefined("header")) {
    @RenderSection("header")
    } 在Content Page中:
    @section header {
    <div id="header">
    Creating a Consistent Look
    </div>
    }

    一般来说,这种方式的使用场景可能不太多。

  • Content Page的PageData属性(Dictionary类型),用于在Content Blocks和Layout Pages之间共享数据。可参考上面链接中的“Passing Data to Layout Pages”部分。

以上方法中,无论是作为Content Blocks还是Layout Page,都是静态页面,也就是这些页面是预先定义好的,而非由Content Page对应的Action生成的(最多是该通过ViewBag传递动态数据),而非由另一个Action生成,通过以下方法,可以在页面中调用另外一个Action方法,从而生成该页面的部分内容:

  1. Html.Action:executes a separate controller action and displays the results. Action offers more fl exibility and re-use because the controller action can build a different model and make use of a separate controller context.
  2. Html.RenderAction: Html.RenderAction 与 Html.Action相同,但Html.RenderAction writes directly to the response (which can bring a slight efficiency gain).

这基本上就是全部的MVC Layout的概念了。

另外顺便说一下几个Rendering Helper的用法:

Asp.Net Razor中的Consistent Layout的更多相关文章

  1. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  2. ASP.NET Core中使用Razor视图引擎渲染视图为字符串

    一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视 ...

  3. 【翻译】介绍 ASP.NET Core 中的 Razor Pages

    介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core         译文地址:介绍 asp. ...

  4. ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考

    原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...

  5. Asp.Net Core-几行代码解决Razor中的嵌套if语句

    MVC开发中,经常会遇到在razor中插入简单的逻辑判断. @if (clientManager.IsAdmin) { if (!Model.Topic.Top) { <a asp-action ...

  6. ASP.NET MVC 3和Razor中的@helper 语法

    原文:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为"Razor"的新视图引擎选项(除了继续支持/加强现有的.aspx ...

  7. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

  8. ASP.NET Core Razor中处理Ajax请求

    如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...

  9. (转)ASP.NET MVC 3和Razor中的@helper 语法

    转自:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外).当编写 ...

随机推荐

  1. 《DSP using MATLAB》示例Example5.7

    代码: x = [1, 1, 1, 1, zeros(1,4)]; N = 8; % zero-padding operation X_DFT = dft(x,N); % DFT of x(n) ma ...

  2. iOS--UIScrollView图片动画切换【实现每次只加载3张图片,进而减少占用内存,可循环滚动】

    #import "ViewController.h" #define IMAGENUMBER 5 #define SIZE self.view.bounds.size @inter ...

  3. java抽象类实践

    package javaClassStudy; /** * * @author yuxg * 抽象类实践 */ public abstract class Person { private Strin ...

  4. 2012 Multi-University #9

    计算几何 A Farmer Greedy 题意:n个点选3个组成三角形,问m个点在三角形内的数字是奇数的这样的三角形个数. 分析:暴力O(N^3*M)竟然能过!我写的搓,加了优化才过掉.正解是先处理出 ...

  5. Theano:LSTM源码解析

    最难读的Theano代码 这份LSTM代码的作者,感觉和前面Tutorial代码作者不是同一个人.对于Theano.Python的手法使用得非常娴熟. 尤其是在两重并行设计上: ①LSTM各个门之间并 ...

  6. JS 生成GUID 方法

    var Guid={NewGuid: function () { var guid = (this._G() + this._G() +"-"+ this._G() +" ...

  7. 服务端的GET、POST请求

    一.HttpClient方式,程序集 System.Net.Http.dll GET: HttpClient httpClient = new HttpClient(); string result ...

  8. 双系统win+ubuntu无法访问win的盘符

    1.打开终端:如果没有安装ntfs-3g就要安装: sudo apt-get install ntfs-3g 2.修复挂载错误的相应的分区: sudo ntfsfix /dev/sda(×) (×)取 ...

  9. android surfaceView 黑屏

    最近在做一个viewpager + fragment 切换的页面, 其中一个fragment 打开摄像头,需要surfaceView,但是当切换到这个fragment的前一个个时,这个fragment ...

  10. 基于小波变换的数字图像处理(MATLAB源代码)

    基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...