【问题标题】:Why does normal markup inside an @Using Html.BeginForm need an @?为什么@Using Html.BeginForm 中的普通标记需要@?
【发布时间】:2012-04-19 09:39:04
【问题描述】:

相关:MVC3 Razor using Html.BeginForm problem

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

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

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

【问题讨论】:

    标签: asp.net-mvc vb.net asp.net-mvc-3 razor


    【解决方案1】:

    将 Razor 与 C# 一起使用时,您所描述的内容是可能的,因为解析器可以确定从代码到标记的转换,因为 html 中的显式“

    【讨论】:

      【解决方案2】:

      我相信 Razor 的 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 for VB.NET 快速浏览 VS2010,这就足够了:

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

        VB.NET 的语言文字 XML 支持与 Razor 的解析器发生冲突,只需添加额外的 @@: 即可防止它发生

        【讨论】:

        • 额外的 @ 或 @: 在该代码中有什么作用?是某种转义字符吗?
        • 或多或少是的。它向剃刀发出信号,表明您正在逃避编程语言(例如 C#、VB.NET)的语法。 C# 不需要额外的微调,因为它不使用符号 &lt;,因此,Razor 也可以使用 &lt; 作为 C# 的 转义符; VB.NET中没有这样的权限,在VB.NET中,任何以&lt;开头的都是XML字面量,所以对于这种场景,需要使用Razor的@来转义VB.NET的语法跨度>
        • Razor 细微差别的另一个例子:ienablemuch.com/2011/08/razor-tag-nuances.html
        【解决方案4】:

        对于多行支持,正如Using in Razor VB.net MVC not work as expected 中指出的,您可以使用@&lt;text&gt;...&lt;/text&gt; 切换回“文本模式”并像这样输出html:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多