在MVC3中使用Html.BeginForm有什么用处。 为什么我们使用它,当我们可以直接添加一个表单标签时,这个html助手是否添加了一些功能,或做了一些无法用简单的表单标签完成的事情。
答案 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
子句中,它将为您关闭表单标记答案 2 :(得分:4)
做一些不能用简单形式完成的事情
最后,每个帮助器方法调用都转换为纯HTML,因此Html.BeginForm无法通过直接使用<form>
标记来完成任何操作。
Html.BeginForm
纯粹是一种辅助方法。
答案 3 :(得分:2)
有帮助的目的是什么? (修辞问题)你也可以手动输入所有输入,但帮助者......好吧,有时候会帮助你。
所有它都把它贴上标签。是的,你可以手动完成,或者你可以更喜欢这样做:
@using(Html.BeginForm())
{
}
这也将为您关闭表单标记。因此,如果您将所有输入保留在曲线括号内,则无需担心记住关闭表单标记。
答案 4 :(得分:0)
很好的问题,我自己也很感激。
我可能是错的,但这是我的猜测(一个更好的人可能会纠正我):
在MVC的早期,没有剃刀。
在C#/ VB和html之间进行切换很难在语法方面进行,因此最大限度地减少了这些边界。
在创建表单时,看到纯粹在C#/ VB端创建整个表单是有益的,没有任何混合的手动html,只有一个边界到周围的html世界。
由于程序员经常从其他地方复制做事的风格,使用这些助手的做法一直存在,即使他们的利益随着剃刀的出现而消失。