为什么@Using Html.BeginForm 中的普通标记需要一个 @



相关: 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:属性说明符不是一个完整的陈述。使用行继续符将属性应用于以下语句。 我需要在开始标签之前添加一个@字符以避免此错误。 有人可以解释为什么吗?

将 Razor 与 C# 一起使用时,可以描述的内容,因为解析器可以确定从代码到标记的转换,

因为 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

最新更新