mvc3之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”。如果这样写是会出错的。

wps_clip_image-29322

  大家会看到,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更多的知识。

  本文来源:http://www.cnblogs.com/arhat/p/3541813.html

posted @ 2014-02-12 23:56  杨潇love  阅读(132)  评论(0编辑  收藏  举报