为什么一个@using Html.BeginForm内正常标记需要一个@?(Why does nor

2019-09-16 14:57发布

相关: 使用剃刀MVC3问题Html.BeginForm

当我做一个HTML表单的MVC 3 / VB剃刀引擎,我希望能够做到这一点是这样的:

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

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

Answer 1:

当使用剃刀用C#,你描述什么是可能的,因为解析器能够确定从代码,因为HTML明确的“<”字符标记的过渡不是一个有效的C#令牌。 VB.NET直接支持内嵌XML代码,所以剃刀分析程序不能确定您已经转移回标记,所以你必须要更加明确。



Answer 2:

我相信,在剃刀beginform应该是这样的,即用花括号:

@using (Html.BeginForm())
{
    @* Other code here *@
}


Answer 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的VB.NET VS2010短期旅行,这就够了:

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

VB.NET语言文字的XML支持运行触犯Razor的解析器,只是阻止它添加额外的@@:



Answer 4:

对于多线支撑 ,如指出, 在剃刀VB.net MVC使用不能按预期 ,您可以使用@<text>...</text>切换回“文本模式”和输出HTML这样的:

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


文章来源: Why does normal markup inside an @Using Html.BeginForm need an @?