2012-04-19 53 views
4

相關:MVC3 Razor using Html.BeginForm problem爲什麼@Using Html.BeginForm中的普通標記需要@?

當我做一個HTML表單的MVC 3/VB剃刀引擎,我希望能夠做到這一點是這樣的:

@Using Html.BeginForm("Action", "Controller") 
    <fieldset> 
     @* Other form code and values *@ 
    </fieldset> 
End Using 

但如果我這樣做,我得到「BC32035:屬性說明符不是一個完整的語句,使用一個續行來將該屬性應用於以下語句。」我需要在開始標記之前添加@字符以避免此錯誤。有人能解釋爲什麼嗎?

回答

3

當使用剃刀用C#,你描述什麼是可能的,因爲解析器能夠確定從代碼由於標記的過渡HTML中明確的'<'字符不是有效的C#標記。 VB.NET直接在代碼中支持內聯XML,因此Razor解析器無法確定您已經轉換回標記,因此您必須更加明確。

3

相信在剃刀beginform應該是這樣的,即用花括號:

@using (Html.BeginForm()) 
{ 
    @* Other code here *@ 
} 
3

我不使用VB.NET,但我認爲你應該這樣做:

@Using Html.BeginForm("Action", "Controller") 
    @:<fieldset> 
     @* Other form code and values *@ 
    @:</fieldset> 
End Using 

使用VB.NET對XML的一流支持,它將標籤視爲XML,因此它將字段集(針對該問題的任何HTML標籤)視爲XML;和XML作爲VB.NET語言的一部分,這將違背Razor的解析器

使用ASP.NET MVC的VB.NET上VS2010的快速行程,這就夠了:

@Using Html.BeginForm("Action", "Controller") 
    @<fieldset> 
     @* Other form code and values *@ 
    </fieldset> 
End Using 

VB .NET的語言文字的XML支持相抵觸運行Razor的解析器,只是阻止它添加額外的@@:

+0

什麼額外的@或@:在那個代碼中做?這是一種逃避角色嗎? – 2012-04-19 15:35:55

+0

或多或少是的。它表示您正在逃避編程語言(例如C#,VB.NET)語法的剃刀。 C#不需要額外的微調,因爲符號'<'沒有被它使用,所以Razor也可以使用'''作爲* C#的* *。在VB.NET中沒有這樣的特權,在VB.NET中,任何以'<開頭的東西都是XML文字,所以對於這種情況,您需要使用Razor的@來避免VB.NET的語法 – 2012-04-19 15:46:28

+0

剃刀細微差別的例子:http://www.ienablemuch.com/2011/08/razor-tag-nuances.html – 2012-04-19 15:52:29

1

對於多線支撐,如Using in Razor VB.net MVC not work as expected指出的那樣,你可以使用@<text>...</text>切換回「文本模式」和輸出HTML這樣的:

@Using Html.BeginForm("Action", "Controller") 
    @<text> 
     <fieldset> 
     * Other form code and values * 
     </fieldset> 
    </text> 
End Using 
相關問題