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>