2012-07-25 362 views
19

MVC3中Html.BeginForm的用法是什麼? 爲什麼我們使用它,當我們可以直接添加一個表單標籤時,這個html助手是否添加了一些功能或做了一些無法用簡單的表單標籤完成的功能。MVC3中Html.BeginForm的用法

回答

29

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是稍顯不便,從剃刀撥打:

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

一個簡單@Html.EndForm()將轉向Write(Html.EndForm()) -> Write(void),即編譯時錯誤。

+0

這裏使用的意思是什麼,它與在asp.net中使用結構有關,用於包裝IDisposable對象? – Charu 2012-07-25 08:02:02

+0

我在答案中添加了一段。 – Kivin 2012-07-25 08:11:45

4

當然你也可以手工編寫代碼,但它確實有幾個優點,如:

  • 它返回一個對象,它是一次性的,這樣就可以把它放在一個using條款,它會關閉窗體標籤爲您
  • 它計算的URL的形式操作
4

做一些事情,不能用簡單的形式來完成

最後,每個輔助方法調用都轉換爲純HTML,因此沒有什麼Html.BeginForm可以做到的,但不能通過直接使用<form>標籤來完成。

Html.BeginForm純屬輔助方法。

2

有幫手的目的是什麼? (修辭問題)你也可以手動輸入所有輸入,但幫手......好吧,有時候會幫助你。

它把它放在標籤。是的,你可以做手工,或者你可以多一點幻想和做到這一點:

@using(Html.BeginForm()) 
{ 
} 

這將關閉表單標籤爲你。因此,如果您將所有輸入保留在曲線括號內,則不必擔心記住關閉表單標記。

+1

問題是*什麼時候會有幫助。忘記關閉標籤就像忘記關閉大括號一樣 - 所以有什麼意義? – John 2014-11-05 09:18:38

0

優秀的問題,我很想知道我自己。

我可能是錯的,但這裏是我的猜測(一個更好的人可以指正):

在MVC的初期,沒有刮鬍子。

C#/ VB和html之間的切換很難在語法上進行切換,所以推動了最小化這些邊界。

創建表單時,有人發現純粹在C#/ VB一側創建整個表單,沒有任何混合的手動html,只能有一個邊界到周圍的html世界。

由於程序員經常從其他地方複製做事風格,使用這些助手的做法一直存在,即使他們的好處隨着剃刀的出現而消失了。