海豚宝宝的代码生活

专注于.Net系统开发

导航

Razor语法总结

本文摘录微软相关文章集合而成,主要是做备忘。

本文主要参考文章:文章一文章二

1. The @ character starts inline expressions, single statement blocks, and multi-statement blocks,这里的block表示代码块,代码块的类型可以分为服务器段代码块(比如if for)和HTM代码块(比如<p></p>),@出现的原则是当当前代码块与上层代码块的性质不同的时候,比如在代码嵌套的情况下,中间夹杂了HTML代码块中的C#代码需要添加@标记

<!-- Single statement blocks  -->
@{ var total = 7; }
<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<!-- Multi-statement block -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Today is: " + weekDay;
}
@标示符后面的代码都会进行HTML编码。
2. A code block includes one or more code statements and is enclosed in braces.
<!-- Single statement block.  -->
@{ var theMonth = DateTime.Now.Month; }
<p>The numeric value of the current month: @theMonth</p>

<!-- Multi-statement block. -->
@{
var outsideTemp = 79;
var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}
<p>Today's weather: @weatherMessage</p>
3. Inside a block, you end each code statement with a semicolon,但在引用某个变量直接穿插在HTML代码中的时候不需要。
4. You enclose literal string values in double quotation marks
  如果你想显示的字符串包涵反斜杠(\)或者需要显示双引号,使用@符号开头的转义方式来处理
<!-- 反斜杠可以放在以@开头的字符串里会被自动转义而不会与C#的语法产生冲突 -->
@{ var myFilePath = @"C:\MyFolder\"; }
<p>The path is: @myFilePath</p>
<!-- 这里用两个双引号来实现转义 -->
@{ var myQuote = @"The person said: ""Hello, today is Monday."""; }
<p>@myQuote</p>
5. @中的服务器端代码是大小写铭感的

6. 用@在代码中来做对象的引用,@符号要起作用,前面必须留空格
<table border="1">
<tr>
<td>Requested URL</td>
<td>Relative Path</td>
<td>Full Path</td>
<td>HTTP Request Type</td>
</tr>
<tr>
<td>@Request.Url</td>
<td>@Request.FilePath</td>
<td>@Request.MapPath(Request.FilePath)</td>
<td>@Request.RequestType</td>
</tr>
</table>
7. @:支持输出单行的文本显示,这里引入这个标记的原因是,在Razor中,默认是有Framework自动判断内容是否是输出内容,它的参考依据一般是基于一个HTML标记,但是在很多状态下,如果内容不是以标准的HTML标记开头,Razor可能无法自动识别,这个时候就要使用@:标记,一般都出现在C#代码片段中间。详情参考Scott的帖子
@:后的文本可以包含纯字符串和非成对的HTML代码,比如<br/>,这里解释一下非成对的HTML标签,有时候由于程序的需要,我们会在Razor的C#代码中出现类似于</div><div>这样的标签,以配合外围标签使用,但由于ASP.Net在解析的时候是一定要保证HTML标签成对出现的,否则就会报错,遇到这种情况,就要请出@:标记了
@if(IsPost) {
// Plain text followed by an unmatched HTML tag and server code.
@: The time is: <br /> @DateTime.Now
// Server code and then plain text, matched tags, and more text.
@DateTime.Now @:is the <em>current</em> time.
}
  <text>支持输出多行的文本显示,
当ASP.Net发现HTML开始标记,它将解析所有的内部标记,同时执行所有的内部服务器端脚本,然后发送到浏览器中
8. 空格和换行情况
//中间的空格不会起作用
@{ var lastName = "Smith"; }
//下面的断句方式等效
@{ var theName =
"Smith"; }

@{
var
personName
=
"Smith"
;
}
//如果打破引号的引用方式,要添加@标识
@{ var longString = @"This is a
long
string
";
}
9. Razor注释方式:@*   *@
  C#注释方式 //
  HTML注视方式 <!--   -->,但和Razor方式不同,这种注释方式会把代码发送到浏览器,只是不显示,用户可以从源代码中查看到注释内容
10. 变量和类型
  变量采用var方式生成,采用AsInt等类似方式进行类型转换,采用IsInt等方式来判断某种类型

11. 对文件和目录的获取定位:
 
//~表示虚拟目录中的根目录
@{
var myImagesFolder = "~/images";
var myStyleSheet = "~/styles/StyleSheet.css";
}
@{
var dataFilePath = "~/dataFile.txt";
}
<!--显示上面虚拟路经的实际绝对路径 -->
<p>@Server.MapPath(dataFilePath)</p>
@{
var myImagesFolder = "~/images";
var myStyleSheet = "~/styles/StyleSheet.css";
}

<!--变量方式 创建一个可以被HTML识别的链接地址 -->
<img src="@Href(myImagesFolder)/Logo.jpg" />

<!-- 直接方式创建一个可以被HTML识别的链接地址 -->
<img src="@Href("~/images")/Logo.jpg" />

<!-- 引入一个CSs文件的反噬 -->
<link rel="stylesheet" type="text/css" href="@Href(myStyleSheet)" />
12. 对当前页面的引用,这里主要调用页面的Request获取URL,User信息,还可以获取页面的Response写入信息,在Razor可以用this引用当前页面,同样也可以省略而直接调用Request。
13. 调用有参数的对象方法,除了常规方法外,还可以用赋值的方法:
// Pass parameters to a method using named parameters.
var myPathNamed = Request.MapPath(baseVirtualDir: "/", allowCrossAppMapping: true, virtualPath: "/scripts");
<p>@myPathNamed</p>









posted on 2012-02-17 16:21  Bruse  阅读(1328)  评论(1编辑  收藏  举报