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形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- 【转】Objective-C Class Dump
(转自:http://blog.sina.com.cn/s/blog_4431c7610100x15t.html) class dump是一个命令行工具,用来监测存储在Mach-O二进制文件理的Obj ...
- WPF下载远程文件,并显示进度条和百分比
WPF下载远程文件,并显示进度条和百分比 1.xaml <ProgressBar HorizontalAlignment="Left" Height="10&quo ...
- android 中handler的用法分析 (二)
.Looper 的构造方法是私有的,不能在package外面直接初始化.一般通过Looper.prepare()初始化.Looper.myLooper()获取.2.Looper 中的静态变量 Thre ...
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通 ...
- Kruskal算法java版
/** * sample Kruskal.java Description: * kruskal算法的思想是找最小边,且每次找到的边不会和以找出来的边形成环路,利用一个一维数组group存放当前顶点所 ...
- 通过PowerShell发送TCP请求
很多时候我们需要通过Socket发送特定的TCP请求给服务器的特定端口来实现探测服务器的指定端口所开启的服务.很多语言都有相应的方法实现上述需求,当然,PowerShell也不例外,比如我们要发送一个 ...
- Hybris电商方案介绍(企业全渠道) B2B B2C O2O建设
1). 什么是Hybris: hybris software成立于1997年,2013年与SAP整合,成为SAP旗下的一份子,提供全渠道客户互动与商务解决方案,该解决方案能够为各机构提供客户的实时背景 ...
- 循环a数组(值代表b的下标)删除b数组中存在的记录,从后往前删
for (var j = adelete.Count-1; j >= 0; --j) { aAttachm ...
- saiku 展示优化
saiku版本:3.7.4 下面是修改步骤,如果觉得麻烦,可以直接下载源代码:https://github.com/lihehuo/saiku 1.关闭自动执行 修改文件:saiku-ui/js/sa ...
- ubuntu系统从中文环境改成英文环境
我们在 安装ubuntu server版的时候,有人可能选择了中文环境安装,因为那样好设置时区等参数,可是安装好了后,运行某些命令的时候会有中文乱码提示,看起很是头蛋疼, 我们就需要将其改成英文环 ...