4

相关:MVC3 Razor 使用 Html.BeginForm 问题

当我使用 Razor 引擎为 MVC 3/VB 制作 HTML 表单时,我希望能够这样做:

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

但如果我这样做,我会得到“BC32035:属性说明符不是完整的语句。使用续行将属性应用于以下语句。” 我需要在开始标记之前添加一个 @ 字符以避免此错误。有人可以解释为什么吗?

4

4 回答 4

3

我相信 Razor beginform 应该是这样的,即带有花括号:

@using (Html.BeginForm())
{
    @* Other code here *@
}
于 2012-04-19T10:07:43.640 回答
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 的解析器背道而驰

在 VS2010 上使用 ASP.NET MVC for VB.NET 快速旅行,这就足够了:

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

VB.NET 的语言文字 XML 支持与 Razor 的解析器发生冲突,只是通过添加额外的@@:

于 2012-04-19T11:12:26.547 回答
3

将 Razor 与 C# 一起使用时,您所描述的内容是可能的,因为解析器可以确定从代码到标记的转换,因为 html 中的显式“<”字符不是有效的 C# 标记。VB.NET 直接在代码中支持内联 XML,因此 Razor 解析器无法确定您已转换回标记,因此您必须更加明确。

于 2012-04-19T11:23:11.473 回答
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
于 2014-11-10T21:57:45.107 回答