2012-08-13 55 views
1

好傢伙我有剃刀語法這個奇怪的問題。剃刀語法不渲染多語句代碼塊

我在剃刀語法寫入相同的代碼熔核,具有以串聯的表達和多語句塊唯一區別。

About.cshtml

<!-- Single statement blocks --> 
    <p> 
     Put content here. 
     @Html.SubmitButton("You are in About") 
    </p> 

呈現的輸出:
enter image description here

Index.cshtml

<!-- Inline expressions BUT DOESNT WORKS--> 
@{ Html.SubmitButton("okay in Index");} 

<!-- Multi-statement block BUT DOESNT WORKS--> 

@{ 
    Html.SubmitButton("You are in Index"); 
    Html.CheckBox("A Check Box"); 
} 

呈現的輸出: enter image description here

P.S:忽略快照中的輸入按鈕的文本。

回答

4

的htmlhelpers只有回報值。

即使裏面的代碼塊,你仍然需要@告訴剃刀如何處理這些值(它們打印到HTML緩存)。

因此,在這種情況下,不要介意代碼塊,這將是多餘的,因爲那裏沒有其他代碼,但html助手。

但即使有其他的代碼被放置在塊內,你仍舊需要@到前言助手:

@{ 
    var myVar = "something"; 
    // and so on ... 

    @Html.SubmitButton("You are in Index"); 
    @Html.CheckBox("A Check Box"); 
} 
+0

真奇怪,'var'聲明和'Html.Submit(」 「)'都是有效的C#語句,那麼爲什麼要對待它們呢? – 2012-08-13 09:41:46

+0

他們並沒有真正被區別對待。如果沒有'@',Html.CheckBox *會做它應該做的事情 - 返回一個字符串,如果你願意的話,你可以捕獲和處理它。 '@ H​​tml.CheckBox(...)'只是'Response.Write(Html.CheckBox(...))的縮寫' – Faust 2012-08-13 09:44:38

+0

因此,把簡單的東西渲染爲html,我可以用'@'符號? – 2012-08-13 10:06:38