MVC3 Razor使用Html.BeginForm存在问题

31

这可能是一个简单的问题,但我有以下代码:

<div>
    @using (Html.BeginForm()) {
        <p>
            ...
        </p>
    }
</div>

它不断地抱怨起始的 { 花括号必须跟随一个结束的 } 花括号,但是它已经在那里了,并且所有这种类型的代码示例都显示这是正确的做法,所以我有点困惑为什么它不起作用...


尝试删除<p>标签,但仍然出现错误:解析器错误消息:using块缺少一个闭合的“}”字符。确保此块中所有“{”字符都有匹配的“}”字符,并且没有任何“}”字符被解释为标记。 - Grofit
3个回答

36

可能在 <p></p> 标签中的代码有错误。

尝试将其注释掉,看看结果如何:

<div>
    @using (Html.BeginForm()) {
        <p>
                    @*  = Server side comment out.
                    ....
                    *@
        </p>
    }
</div>

15
作为一个傻瓜,似乎在一个子元素中有一个未关闭的引号(value="Submit)导致了问题 :( - Grofit
10
你做那件事并不代表你是个白痴,否则每天我都会成为一个白痴。哎呀... - MrBoJangles
是的,即使是一个简单的缺少结束 div 标签 </div> 也可能导致这种情况。提到这一点是因为今天每个人都在使用 bootstrap,如果您将表单结束大括号向上移动到您的 HTML 代码中,这很容易成为原因。 - Matt

3
这是我的解决方法:

对我而言,这种方式可行:

  @{ using (Html.BeginForm(...))
     {
      <p>
      Content here
      </p>
     }
  }

问题在于使用的是一个语句而不是表达式,因此不起作用。对于语句,Razor 语法是使用。但是 using 语句包含了自己的一对花括号,所以它会有点扭曲,像这样:@{ using(...) { ... } }

0
在我的情况下,我缺少了一个闭合的div标签,导致了类似的错误。
错误代码:
<div>
@using (Html.BeginForm()) {
    <div><p>
                @*  = Server side comment out.
                ....
                *@
    </p>
}
</div>

已解决:

<div>
@using (Html.BeginForm()) {
    <div><p>
                @*  = Server side comment out.
                ....
                *@
    </p></div>
}
</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接