What is the use of Html.BeginForm in MVC3. Why do we use it, when we can just add a form tag directly, does this html helper add some capability or does something which cannot be done with a simple form tag.
5 回答
Html.BeginForm
辅助方法包含几个重载,其目的是使编写路由表单更容易。它了解 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)
,即编译时错误。
当然,您可以手动编写代码,但它确实有几个优点,例如:
- 它返回一个一次性的对象,这样你就可以把它放在一个
using
子句中,它会为你关闭表单标签 - 它计算表单操作的 URL
做一些简单的表格无法完成的事情
<form>
最后,每个辅助方法调用都转换为纯 HTML,因此 Html.BeginForm 没有什么是直接使用标记无法完成的。
Html.BeginForm
纯粹是一个辅助方法。
有帮手的目的到底是什么?(反问)您也可以手动输入所有输入,但是助手……嗯,有时会帮助您。
它所做的一切都放在标签上。是的,您可以手动完成,或者您可以更花哨地执行以下操作:
@using(Html.BeginForm())
{
}
这也会为您关闭表单标签。因此,如果您将所有输入保存在弯曲括号内,则无需担心记住关闭表单标签。
很好的问题,我自己也很想知道。
我可能是错的,但这是我的猜测(更好的人可能会纠正我):
在 MVC 的早期,没有剃刀。
在 C#/VB 和 html 之间切换在语法方面是困难的,因此推动了将这些边界最小化。
在创建表单时,完全在 C#/VB 端创建整个表单,没有任何混合的手动 html,只与周围的 html 世界有一个边界,这是有益的。
而且由于程序员经常从其他地方复制做事的风格,使用这些助手的做法一直存在,即使它们的好处随着剃刀的出现而消失了。