002_Razor简介
关于 Razor:
Razor 语句以 @ 字符开始。在使用 Razor 声明视图模型对象的类型时要使用小写字母,如在本例文件 Index.cshtml 文件中 @model 以小写的 m 开头,但要注意,在
访问被声明的视图模型对象的类型时要以大写字母的形式开头,如 @Model.Name 的形式(以大写的 M 开头,“ Name ”为被声明的视图模型对象的类型:Product 中的一
个属性)。
Razor 代码块的书写方式是以 @{开始,以 } 结束的表达形式,在该代码块中可以允许用户填写 C# 代码语句。
如本例文件 Index.cshtml 文件中的:
@{
//将 Layout 设置成 null 则说明该视图是自包含的,并且会渲染返回给客户端所需要的所有内容。
Layout = null;
}
布局
布局:布局是特殊形式的视图。它是对试图进行支持的文件,在 Views 文件夹中以下划线“_”开头的形式命名,这也可以表明该文件是不会被渲染的视图文件。布局中的
任何元素都会被运用于使用此布局的任何视图,因此,布局是基本模板。
但这会有一个问题,就是我们需要为在每一个要使用该布局的视图中进行指定。这就会在我们需要重命名布局文件的时候去查找所有引用该布局的每一个视图并进行修改。
要想解决这个问题,我们可以使用视图起始文件。在使用视图起始文件的时候无需以任何方式指定要使用的视图起始文件。如果,我们不想使用视图起始文件中的定义,
可以直接在视图文件中进行其自身的定义,而且,这一定义将拥有更改的优先级(这使得视图中的定义会覆盖视图起始文件中的定义)。
使用 Razor 表达式设置元素标签属性值
我们可以通过 Razor 表达式来设置元素标签的属性的值。下面举例自定义标签和checkbox 的 checked 标签属性:
1、 自定义标签属性(以 data 为例):
data 标签属性的一般其形式为:data-为前缀,在自定义标签属性中,这是一种普遍的非正规的方式,但现在已经成为 HTML5 正规标准的一部分。
一般代码形式为:data-***="@###" ,其中 *** 可以是其他自定义内容,这里使用视图包给出简单示例,如:data-discount="@ViewBag.ApplyDiscount"。
Razor 在渲染时,对于True或False 这样的布尔值会对应的转换为布尔型的视图包值,儿值为 null 的属性,则会被渲染成空字符串。如 HomeController 中 DemoExpression 方法的ViewBag.ExpressShip = true、ViewBag.ApplyDiscount
= false和ViewBag.Supplier = null 分别会被渲染成 data-discount="False"、data-express="True"和data-supplier=""(HTML 的源码中可以看到,其在视图代码中的形式如: DemoExpression.cshtml 中的 data-discount="@ViewBag.ApplyDiscount" data-express="@ViewBag.ExpressShip" data-supplier="@ViewBag.Supplier")。
2、 控件的标签属性(以 checkbox 的 checked 标签属性为例):
<input type="checkbox" checked="@***" />
在这个例子中,Razor 会自动的识别 False、null或空字符串,并不对其进行渲染,如在视图代码中的形式:
Discount:<input type="checkbox" checked="@ViewBag.ApplyDiscount" />
Express:<input type="checkbox" checked="@ViewBag.ExpressShip" />
Supplier:<input type="checkbox" checked="@ViewBag.Supplier" />
将会被转换为 HTML 源码中下面的形式:
Discount:<input type="checkbox" />
Express:<input type="checkbox" checked="checked" />
Supplier:<input type="checkbox" />
使用条件语句
可以通过在 C# 的条件关键字前使用 @ 字符来开始一个条件语句,这样就可以使用标准的 C# 代码表达要实现的条件逻辑。
在 Razor 代码块的内部只要通过定义 HTML 以及 Razor 表达式,就可以将 HTML 元素和数据值插入大视图输出,而不需要将元素或表达式放在引号内或以特殊的方式来表示。(如:<b>Low Stock (@ViewBag.ProductCount)</b>、@ViewBag.ProductCount)但是,如果想将为包含在 HTML 元素中的文字文本插入到视图,则需要使用 Razor 的一个辅助工具,并以它作为该行的前缀(如:@:Out of Stock)。
@:字符会阻止 Razor 将此行解释为一条 C# 语句。
条件语句除了视图 DemoExpression.cshtml 中演示的switch 形式,还可以使用 if 语句实现同样的效果,具体可参考该视图文件中的书写。
002_Razor简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- Ecshop文章列表页显示内容摘要
本教程中讲到的“内容摘要”指的是文章内容的前 60个字符(当然也可以是前40个,前50个等等) 下面以 2.7.2版 + 官方默认模板 为例进行讲解: 1).修改 includes/lib_artic ...
- css 单位转换
如今 css 的单位越来越多了,px, em, rem, 微信的小程序又出来个 rpx 可以用 less 自动生成需要的单位 但当你只是想把一个已有的页面转换成小程序时,可能更需要一个 px -> ...
- 删除.gitignore中的在version control中的文件
如果有一个文件例如xyz在版本控制系统中,然后你发现这个文件不应该提交到git上,所以加了.gitignore文件并将其加入其中,但是git不会自动讲其从版本库中移除它.如果你只有一个文件,你可以使用 ...
- javap生成的字节码
https://www.zhihu.com/question/49470442/answer/135812845http://blog.csdn.net/tzs_1041218129
- OpenGL cubeMap
glsl 的reflect(I,N)其中I是 眼睛(camera)位置到顶点位置的方向向量,N为顶点法线,必须要归一化 橙宝书里给出的计算过程是这样的:reflect(I,N) = I - 2 *do ...
- List的遍历和删除元素
package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public c ...
- [LeetCode] Range Sum Query 2D - Immutable
Very similar to Range Sum Query - Immutable, but we now need to compute a 2d accunulated-sum. In fac ...
- LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium
题目: Given a . For . 解题思路: 这个题让找一个字符串中具有不重复单词的最长子串的长度,如:ababc,子串为abc,长度为3.有这么几个方法: 方法一: 依赖字符串本身的一些特有函 ...
- SSAS:菜鸟笔记(二)定义计算(DMX脚本)
基本概念 Calculation可以定义计算成员.名称集以及执行其他脚本命令来扩展分析服务立方(Analysis Service Cube)的功能. Calculation包含MDX以及脚本两个部分: ...
- 编译升级php之路(5.5.7 到 5.5.37)
为在一台旧服务器上能使用slim,共经历了: 1.安装composer(需要高版本php,原来是5.5.7) 2.升级php版本到5.5.37(编译出错,准备使用docker) 3.升级centos内 ...