一步步学习ASP.NET MVC3 (3)——Razor(1)
请注明转载地址:http://www.cnblogs.com/arhat
首先这个《一步步学习ASP.NET MVC3》前段时间有些忙,没有顾得上写文章,昨天呢写了3个和ASP.NET的相关的文章,和Spring.NET,NHibernate的相结合的。这个虽说写的有点早了,但是后续我会尽快的把Spring.NET和NHibernate的相关系列写出来,时间虽然不确定,这里呢老魏先说声抱歉,我尽可能的抽出时间来写。
本身写文章就是件耗时的工作,不仅要思虑清晰,通俗易懂,还得配上相关的插图和示例程序,所以比较麻烦,不过只要有大家的支持,老魏再辛苦也要写出来给大家的。写的不好的地方,希望大家能够持证出来,谢谢!
好了,言归正传,本章主要讲解一下ASP.NET MVC Razor的知识,可能这个Razor的知识本章可能讲不完,不过没关系,一章章的来呗!
首先介绍一下Razor,Razor是微软用于视图呈现的新型语法,他的设计目标是让代码和标记流能够一起工作同时尽量不与控制字符冲突。不要感觉新生的事物比较难学,事实上Razor非常简单,比传统的ASP.NET服务器脚本块要好的多。
ASPX代码
<ul>
<% foreach(var p in Model.Products) { %>
<li><%= p.Name %></li>
<% } %>
</ul>
Razor代码
<ul>
@foreach(var p in Model.Products) {
<li>@p.Name</li>
}
</ul>
从上面的代码我们可以看出,Razor不像<%%>和标记混合起来了。Razor在书写的时候能够像平时写程序时该怎么写就怎么写,不用区分标记文本之类的。
Razor语法中,提供了一个非常特殊的符号“@”,这个符号可以说是Razor中的核心东西,简单的来说就是使用“@”来代替<%%>,一个@就是就一个<%%>。
下面通过一些在编程中遇到的问题来说明Razor的用法。
一、定义变量
在Razor中如果要定义变量,那么我们可以使用@{}来定义。
@{ String name = “济公活佛”;
int age = 90; }
当然,在这个{}中我们还可以写语句。
@{ string name = “济公活佛”;
int age = 90;
if(age > 50) { name = “济颠长老”; } }
输出一下:
<div> @name
</div>
Index.cshtml
@{ Layout = null; } <!DOCTYPE html>
<html> <head> <title>Index</title> </head> <body> <div> @{ string name = "济公活佛"; int age = 90; if(age>50) { name = "济颠长老"; } } @name </div> </body> </html>
预览一下,我们就会看到结果。
二、输出内容
根据上面我知道@{}是用来定义变量和书写语句的,和<%...%>代码块的效果是一样的,但是Razor的输出却和ASPX不同,它通过@符号来直接输出,就像上面的输出name一样。但是这里却有一些有趣的问题。我们先来做一下实验。
@{
string name = “济公活佛”; }
现在我要输出name这个变量,如果要直接输出没什么问题,就是@name。那么现在我想输出的格式是“我的名字是济公活佛”。你可能说这不是很简单嘛,这样写“我的名字是@name”。如果这样写是会出错的。
大家会看到,VS工具并没有认出@字符,认为@只是个普通的字符。并不能把“济公活佛”输出。那么怎么办呢?我们可以这样写
我的名字是@{@name}
我的名字是@(@name)
我的名字是 @name
这是怎么回事呢?所有以 @开头的部分代码都会被ASP.NET引擎进行处理。如果我们这样写“我的名字是@name”文本和@之间没有空格,那么ASP.NET引擎是不认识@符号的。那么我们肯定很郁闷,本来不想多个空格,但却多了一个空格。纯文本和Razor之间是不能直接写到一起的,ASP.NET引擎会检查@符号前面是否有内容,如果有内容那么将分为两种情况。
1,纯文本
如果是纯文本,在纯文本后面必须加上一个空格才能识别出Razor
如果是纯文本,不想加空格,则使用@{@变量}或@(@变量)。
我的名字是@{@name}
我的名字是@(@name)
2,Html标签
如果是Html标签,那么就直接@变量就可以了,因为是HTML标签而不是纯文本。比如:
@{
string name = “济公活佛”; }
<div>@name</div>
3,在@{...}内部输出文本
在@{}内部也可以输出文本
@{
@:我是文本
@:我是文本 too
@:@name 也可输出变量
}
在@{...}内部输出文本的时候,必须使用”@:”,在这里需要注意的是”@:”必须在前面。如果这样写就是错误的。
@{
我的名字是 @:@name
}
而应该这样写:
@{
@:我的名字是 @name
}
当然@{...}所代表的范围比较大,不仅仅是@{...},还包括各种带{}的语法也得这样输出。比如:
@if(true)
{ @:我的名字是@name
//我的名字是@:@name是错误的 }
4, 在@{...}内部输出HTML
在@{...}不仅能够输出纯文本,还能输出HTML,输出HTML标签就非常的简单,该怎么写就怎么写。
@{
<p>text</P>
<div>div1</div>
}
同理,在各种带{}的语法也是如此。
5,注释
@{
//单行注释
var i = 10;
//defg
}
@* 多行注释 *@
@*
多行注释
多行注释
*@
@{
@*
多行注释
多行注释
*@
var i = 10; @* asdfasf *@
}
<-- 同时也可以使用C#默认的/* ... */ -->
@{
/*
多行注释
*/
}
那么以上呢那就是对Razor语法的简单介绍,后续还有Razor更多的知识。今天到这儿吧,没有源码哦1
一步步学习ASP.NET MVC3 (3)——Razor(1)的更多相关文章
- 一步步学习ASP.NET MVC3 (4)——Razor(2)
请注明转载地址:http://www.cnblogs.com/arhat 在上一章,我们介绍了Razor的一些基本语法,从Razor中我们可以出ASP.NET MVC的视图引擎给我们带来的便利,但是同 ...
- 一步步学习ASP.NET MVC3 章节总结
请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...
- 一步步学习ASP.NET MVC3 (1)——基础知识
请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...
- 一步步学习ASP.NET MVC3 (12)——FileResult
请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...
- 一步步学习ASP.NET MVC3 (2)——入门程序
请注明转载地址:http://www.cnblogs.com/arhat 在上一节中,我们只是简单的介绍了什么是MVC及MVC的运行原理.而本节呢,主要来实现下一ASP.NET MVC3的开发流程,并 ...
- 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...
- 一步步学习ASP.NET MVC3 (6)——@helper,@functions
请注明转载地址:http://www.cnblogs.com/arhat 在前一章中,我们讲述了View如何从Action中获得数据,并显示出来,但随着需求的变化,我们可能要对View中显示的数据作出 ...
- 一步步学习ASP.NET MVC3 (14)——Route路由
请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...
- 一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult
请注明转载地址:http://www.cnblogs.com/arhat 前面几章我们讲解的都是关于View方面的知识,虽然还有很多关于View的知识没有讲,但是没关系,我们在后面使用到的时候在讲解, ...
随机推荐
- iOS 本地自动打包工具
1.为什么要自动打包工具? 每修改一个问题,测试都让你打包一个上传fir , 你要clean -> 编译打包 -> 上传fir -> 通知测试.而且打包速度好慢,太浪费时间了.如果有 ...
- C++获取文件长度
ifstream fin("example.txt", ios::binary); fin.seekg(0, ios::end); // 设置指针到文件流尾部 streampos ...
- C#如何加载程序运行目录外的程序集
我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能使用System32目录,也可能使用其它第三方的程序集..Net程序集 首先会在GAC中搜索相应 ...
- 关于新feature对应的增加一个新的测试单子(QA)和文档单子(Doucmentation)的步骤
一,增加一个new feature的文档单子. 1.new feature 增加对应的文档单子(公司有一个组是专门写产品说明的)所以增加一个新的功能就要有这个新的功能对应的一个文档(Documenta ...
- 在orangepi-PC, ubuntu mini下使用usb wifi(rtl8188cu/rtl8192cu)
本文章针对orangepi-pc下的ubuntu,分两部分,分别介绍在ubuntu14.04(trusty)mini下使用usb无线网卡的方式,以及怎样在ubuntu15.10(wily)mini下正 ...
- Hive UDAF介绍与开发
UDAF简介 UDAF是用户自定义聚合函数.Hive支持其用户自行开发聚合函数完成业务逻辑. 通俗点说,就是你可能需要做一些特殊的甚至是非常扭曲的逻辑聚合,但是Hive自带的聚合函数不够玩,同时也还找 ...
- scala学习笔记:理解stream和view
先来个正常的: scala> (0 to 5).map((x:Int)=>{println(x);x*2}).foreach(println) 0 1 2 3 4 5 0 2 4 6 8 ...
- 在shell的if条件里,判断 a>0 且 (b>0 或 c>0) ,如何编写?
if [ $b -gt 0 -o $c -gt 0 -a $a -gt 0 ]; then.fi对shell中的关系运算符说明如下:-gt 表示greater than,大于-lt 表示less th ...
- PowerDesigner使用教程 —— 概念数据模型 (转)
一.概念数据模型概述 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充.它从用户的观点出发对信息进行建模,主要用于 ...
- 使用info.plist(或工程名-info.plist)向程序中添加软件Build ID或者版本号信息
在实际应用程序开发过程中,经常需要向程序中添加软件版本号或者类似的信息,以保证之后发现问题时知道bug所在的版本,我们可以通过在工程名-info.plist文件中设置相关的key/value对(键/值 ...