在MVC3中使用Html.BeginForm有什么用

时间:2012-07-25 07:46:05

标签: asp.net-mvc

在MVC3中使用Html.BeginForm有什么用处。 为什么我们使用它,当我们可以直接添加一个表单标签时,这个html助手是否添加了一些功能,或做了一些无法用简单的表单标签完成的事情。

5 个答案:

答案 0 :(得分:31)

Html.BeginForm辅助方法包含couple overloads,其目的是使编写路由表单更容易。它了解MVC结构,并确保其目标是控制器和动作。这只是一些语法糖:

<form method="post" action="@Url.Action(...)">

用微软的话来说:

  

ASP.NET MVC框架包含帮助程序方法,这些方法提供了一种在视图中呈现HTML的简便方法。

当然,没有人让你使用它们。这只是一个偏好问题。事实上,在MVC的早期阶段,许多WebForms开发人员都在庆祝他们从服务器控制中获得新的自由[a-la <asp:TextBox>等,并且坚持要手工编写所有内容。

强烈建议您使用表单字段的帮助程序,因为他们知道表单验证等内容。 Html.BeginForm只是为您提供了开始和完成表单的一致方法:

@using(Html.BeginForm())
{
    @Html.LabelFor(...)
    @Html.EditorFor(...)
}

Html.BeginForm返回一个IDisposable对象,允许您将其包装在C#using语句中。当using退出时,处理将自动为您调用Html.EndForm()。由于Html.EndForm返回void,因此从Razor打电话有点不方便:

@Html.BeginForm()
<formStuff>
@{Html.EndForm();}

简单@Html.EndForm()将转为Write(Html.EndForm()) -> Write(void),即编译时错误。

答案 1 :(得分:5)

当然,您可以手动编码,但它确实有几个优点,例如:

  • 它返回一个一次性的对象,以便您可以将其放在using子句中,它将为您关闭表单标记
  • 它计算表单操作的URL

答案 2 :(得分:4)

  

做一些不能用简单形式完成的事情

最后,每个帮助器方法调用都转换为纯HTML,因此Html.BeginForm无法通过直接使用<form>标记来完成任何操作。

Html.BeginForm纯粹是一种辅助方法。

答案 3 :(得分:2)

有帮助的目的是什么? (修辞问题)你也可以手动输入所有输入,但帮助者......好吧,有时候会帮助你。

所有它都把它贴上标签。是的,你可以手动完成,或者你可以更喜欢这样做:

@using(Html.BeginForm())
{
}

这也将为您关闭表单标记。因此,如果您将所有输入保留在曲线括号内,则无需担心记住关闭表单标记。

答案 4 :(得分:0)

很好的问题,我自己也很感激。

我可能是错的,但这是我的猜测(一个更好的人可能会纠正我):

在MVC的早期,没有剃刀。

在C#/ VB和html之间进行切换很难在语法方面进行,因此最大限度地减少了这些边界。

在创建表单时,看到纯粹在C#/ VB端创建整个表单是有益的,没有任何混合的手动html,只有一个边界到周围的html世界。

由于程序员经常从其他地方复制做事的风格,使用这些助手的做法一直存在,即使他们的利益随着剃刀的出现而消失。