2012-12-04 77 views
0

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?这段代码是否也在代码块中? 谢谢, Smith

回答

2

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

  1. 阅读到一个有效的标识符的端部(即,C#或VB关键字)或变量名。
  2. 如果下一个字符是一开口托架((或[)...

    一个,保持解析,直到相应的闭托架所在的位置。嵌套括号 也跟踪,以避免块的过早关闭。

    湾循环返回到#2。

  3. 如果下一个字符是一个。(句号)和之前是有效的标识符,则跳转到#1。
  4. 完成代码语句并继续处理标记的其余部分

究其原因,是@person有告诉Razor视图引擎,它们是标记和代码之间的过渡

+0

非常感谢你的回复。 – user1736299

+0

不客气,如果这有助于你,请接受答案。 – heads5150

+0

不完全清楚。但你的解释是有道理的。 – user1736299