Asp.Net Razor中的Consistent Layout
有意义的参考: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方法,从而生成该页面的部分内容:
- 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.
- 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的更多相关文章
- 如何在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 ...
- ASP.NET Core中使用Razor视图引擎渲染视图为字符串
一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视 ...
- 【翻译】介绍 ASP.NET Core 中的 Razor Pages
介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core 译文地址:介绍 asp. ...
- ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...
- Asp.Net Core-几行代码解决Razor中的嵌套if语句
MVC开发中,经常会遇到在razor中插入简单的逻辑判断. @if (clientManager.IsAdmin) { if (!Model.Topic.Top) { <a asp-action ...
- ASP.NET MVC 3和Razor中的@helper 语法
原文:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为"Razor"的新视图引擎选项(除了继续支持/加强现有的.aspx ...
- ASP.NET MVC 3: Razor中的@:和语法
原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...
- ASP.NET Core Razor中处理Ajax请求
如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...
- (转)ASP.NET MVC 3和Razor中的@helper 语法
转自:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外).当编写 ...
随机推荐
- 整理UWP中网络和设备信息获取的帮助类,需要的拿走。
网络(运营商信息,网络类型) public static class NetworkInfo { /// <summary> /// 网络是否可用 /// </summary> ...
- UWP 禁止Pivot swip 手势
以前想要禁止内置的手势动作,看了一下网上是设置 IsLocked="True". 但是拿到UWP上来,靠,设置了之后header只显示当前的那个header.这样的设计真是丑爆了. ...
- Java基础知识点3:集合类
集合类是Java编程中经常会用到的一类常用类库,在这里将会对整个集合类进行介绍: Collection接口: Collection接口是所有集合类的根接口,代表了所有含有多个元素的集合,无论这个集合中 ...
- UIView--震动效果
//震动效果- (void)shake:(UIView *)view{ CGRect frame = view.frame; CAKeyframeAnimation *shakeAnimation = ...
- [转] 《ES6标准入门》读书笔记
来源:https://segmentfault.com/a/1190000005863641 let和const命令 ES6新增let命令,用于声明变量,是块级作用域. let声明的变量不会像var声 ...
- 从零开始山寨Caffe·肆:线程系统
不精通多线程优化的程序员,不是好程序员,连码农都不是. ——并行计算时代掌握多线程的重要性 线程与操作系统 用户线程与内核线程 广义上线程分为用户线程和内核线程. 前者已经绝迹,它一般只存在于早期不支 ...
- Object-C 1.0 第二章
1. 输出obc #import <Foundation/Foundation.h> int main(int argc,const char *argv[]) { NSLog(@&qu ...
- 使用tungsten将mysql的数据同步到hadoop
背景 线上有很多的数据库在运行,后台需要一个分析用户行为的数据仓库.目前比较流行的是mysql和hadoop平台. 现在的问题是,如何将线上的mysql数据实时的同步到hadoop中,以供分析.这篇文 ...
- easyUI 表格
1.创建 <table id ="ID"></table> 2.属性 dategrid: columns 列的定义的数组 URl:访问远程数据的数组 [“t ...
- js事件机制——事件冒泡和捕获
概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获. IE浏览器:事件从 ...