相关: MVC3 Razor using Html.BeginForm 问题
当我使用 Razor 引擎为 MVC 3/VB 制作 HTML 表单时,我希望能够像这样做:
@Using Html.BeginForm("Action", "Controller")
<fieldset>
@* Other form code and values *@
</fieldset>
End Using
但是如果我这样做,我会得到"BC32035:属性说明符不是一个完整的陈述。使用行继续符将属性应用于以下语句。 我需要在开始标签之前添加一个@字符以避免此错误。 有人可以解释为什么吗?
因为 html 中的显式"<"字符不是有效的 C# 标记。 VB.NET 直接在代码中支持内联 XML,因此 Razor 分析器无法确定您是否已转换回标记,因此您必须更加明确。
Razor 开始形式应该是这样的,即带有大括号:
@using (Html.BeginForm())
{
@* Other code here *@
}
我不使用 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的解析器背道而驰。
在VS2010上使用 ASP.NET MVC进行 VB.NET 快速旅行,这就足够了:
@Using Html.BeginForm("Action", "Controller")
@<fieldset>
@* Other form code and values *@
</fieldset>
End Using
.VB。NET的语言文字XML支持与Razor的解析器相冲突,只需通过添加额外的@
或@:
来防止它
对于多行支持,如在 Razor 中使用中所述 VB.net MVC 无法按预期工作,您可以使用 @<text>...</text>
切换回"文本模式"并输出 html,如下所示:
@Using Html.BeginForm("Action", "Controller")
@<text>
<fieldset>
* Other form code and values *
</fieldset>
</text>
End Using