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

Cha*_*aru 20 asp.net-mvc

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

Jes*_*lam 33

Html.BeginForm辅助方法,包含了几个重载,其预期的目的是使写作路由形式更容易.它了解MVC结构,并确保其目标是控制器和动作.这只是一些语法糖:

<form method="post" action="@Url.Action(...)">
Run Code Online (Sandbox Code Playgroud)

用微软的话来说:

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

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

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

@using(Html.BeginForm())
{
    @Html.LabelFor(...)
    @Html.EditorFor(...)
}
Run Code Online (Sandbox Code Playgroud)

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

@Html.BeginForm()
<formStuff>
@{Html.EndForm();}
Run Code Online (Sandbox Code Playgroud)

一个简单的@Html.EndForm()将转入Write(Html.EndForm()) -> Write(void),即编译时错误.


Luc*_*ero 5

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

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