2012-12-04 75 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