约定:客户端代码称C域,服务器端代码称S域

0. 基本原则

Razor模板默认是C域(与php、aspx相同)

任何C域都可以内嵌S域

行内S域不可内嵌C域,多行S域可内嵌任何C域

@符号是关键符号,使用@从C域向S域切换

使用标签从S域向多行C域切换,使用@:从S域向行内C域切换

1. 行内S域的几种形式

@变量  例如:@User.Name,变量或属性结束后自动变回C域,如遇结束判断有歧义,请加括号如下

@( 表达式 )  例如:@(i + 1) 或 @(User.Name)

@方法调用  例如:@Html.TextBox("username").ToString()

2. 多行S域的几种形式

@{ 代码块 }

@if (条件) { 代码块 }

@switch (条件) { 分支匹配代码块 }

@for (循环控制) { 代码块 }

@foreach (循环控制) { 代码块 }

@while (循环控制) { 代码块 }

@do { 代码块 } while (循环控制);

3. 行内C域的形式

@:行内文字,换行自动变回S域

4. 多行C域的几种形式

任何标签对  例如:<div>多行文字</div>

任何自闭合标签  例如:<img 多行属性 />

纯文字使用伪标签<text>  例如:<text>多行文字,两侧标签不会被输出</text>

5. 冲突解决

电子邮箱可自动识别并输出  例如:hello@hotmail.com 会以文字形式正确输出

误判的解决  例如:hello@User.Name 会误判为电子邮箱,应加括号解决,即:hello@(User.Name)

非电子邮箱,则使用@@转义输出单个@

6. 预设指令符

@model 指定视图使用的模型

@section 指示开始一个节的定义

@helper 定义一个HtmlHelper扩展