Razor Syntax澄清

时间:2012-12-04 23:35:22

标签: asp.net-mvc asp.net-mvc-3 razor

http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3razor.aspx

在上面的链接...... ..

代码块Foreach

@{
    <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
  }

为什么h3标签“团队成员”没有抛出未声明的C#错误?这是在代码块内部,它表示它是一个C#代码。 代码块中是否会忽略所有HTML标记?

同样,为什么@签到@person?是不是这个代码也在代码块内? 谢谢, 史密斯

1 个答案:

答案 0 :(得分:2)

@符号是Razor语法的核心,Razor用来区分代码和标记的字符。 @符号表示开发人员打算从标记切换到代码的点。在简单的情况下,不需要其他字符来指示代码何时停止并且标记恢复。 Razor的智能解析器确定模板的哪些部分是代码,哪些是标记。什么是有效的代码声明? Razor在读取@符号触发器时使用以下算法查找代码语句的结尾:

  1. 读取有效标识符(即C#或VB关键字)或变量名称的末尾。
  2. 如果下一个字符是左括号((或[] ...

    一个。继续解析,直到找到相应的右括号。嵌套括号   也被跟踪以避免过早关闭一个区块。

    湾循环回#2。

  3. 如果下一个字符是a。 (句点)并在有效标识符之前,跳转到#1。
  4. 完成代码语句并继续处理标记的其余部分。
  5. @person的原因是告诉Razor视图引擎它们是标记和代码之间的转换