剃刀要求;在做什么时使用(Html.BeginForm())

时间:2011-01-17 13:55:07

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

@using(Html.BeginForm()){
Name:
    @Html.TextBoxFor(o => o.Name)
        <input type="submit" value="submit" />
    }

这会给出错误 CS1002 :;预期

如果我删除了名称

,它就有效

或者如果我这样做:

<form action="@Url.Action("AddHuman")" method="post">
Name:
    @Html.TextBoxFor(o => o.Name)
        <input type="submit" value="submit" />
</form>

2 个答案:

答案 0 :(得分:17)

问题最有可能出现在Name:字面上。由于您位于代码块内,因此Razor假定下一行是代码行。您可以使用Name:前置@:或将<text></text>包裹起来,以避免这种情况。文本标记对于Razor是特殊的,并且在视图引擎解析时将被删除。

<input>没问题的原因是Razor认识到它是一个标记标记并将其写入响应流,Name:它不能假设它是因为它不是'一个实际的标记标记。

答案 1 :(得分:2)

有时razor会感到困惑,因此您需要将代码包装在html标记内。如果你不想仅仅因为剃刀没有获得额外的html标签,你可以使用<text>来删除它。

@using(Html.BeginForm()){
   <text>
       Name:
       @Html.TextBoxFor(o => o.Name)
       <input type="submit" value="submit" />
   </text>
}