2012-07-25 12 views
19

Qual è l'uso di Html.BeginForm in MVC3. Perchè lo usiamo, quando possiamo semplicemente aggiungere un tag form direttamente, questo helper html aggiunge alcune funzionalità o fa qualcosa che non può essere fatto con un semplice tag form.Qual è l'uso di Html.BeginForm in MVC3

risposta

29

Il metodo di supporto Html.BeginForm contiene uno couple overloads il cui scopo è quello di semplificare la scrittura di moduli instradati. È a conoscenza della struttura MVC e si assicura che il suo targeting sia un controller e un'azione. E 'solo un po' di zucchero sintattico sopra:

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

Secondo le parole di Microsoft:

Il framework ASP.NET MVC include metodi di supporto che forniscono un modo semplice per il rendering HTML in vista.

Naturalmente nessuno ti sta facendo usare. È solo una questione di preferenza. Infatti, agli albori di MVC, molti sviluppatori WebForms hanno celebrato la loro nuova libertà dai controlli server a-la <asp:TextBox> e altri, e hanno insistito a scrivere tutto a mano.

L'utilizzo degli helper per i campi del modulo viene altamente raccomandato, poiché sono a conoscenza di aspetti quali la convalida del modulo. Html.BeginForm solo ti dà un modo coerente per iniziare e finire la vostra forma:

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

Html.BeginForm restituisce un oggetto IDisposable, che consente di avvolgere nella dichiarazione C# using. Quando esce using, la disposizione chiamerà automaticamente Html.EndForm() per te. Dal momento che i rendimenti Html.EndFormvoid è un po 'scomodo per chiamare da Razor:

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

Un semplice @Html.EndForm() si trasformerà in a Write(Html.EndForm()) -> Write(void), ovvero compilazione errore di tempo.

+0

Cosa significa questo qui, è relativo all'utilizzo del costrutto in asp.net che usi per avvolgere oggetti IDisposable? – Charu

+0

Ho aggiunto un paragrafo alla risposta. – Kivin

4

Naturalmente è possibile codificare a mano, ma ha diversi vantaggi, come ad esempio:

  • restituisce un oggetto che è usa e getta, in modo che si può mettere in una clausola using e sarà chiudere il tag form per voi
  • calcola l'URL per l'azione modulo
4

fa qualcosa che non può essere fatto con un semplice form

Alla fine, ogni chiamata di metodo di supporto viene convertita in puro HTML, quindi non è possibile eseguire operazioni che non possono essere eseguite da Html.BeginForm utilizzando direttamente il tag <form>.

Html.BeginForm è puramente un metodo di supporto.

2

Qual è lo scopo di avere degli aiutanti? (Domanda retorica) Puoi anche digitare tutti gli input manualmente, ma gli helper ... beh, ti aiutano a volte.

tutto ciò che mette tag.Sì, si può fare manualmente, oppure si può essere un po 'più di fantasia e fare questo:

@using(Html.BeginForm()) 
{ 
} 

Questo chiude la tag form per voi pure. Quindi se mantieni tutti i tuoi input all'interno delle parentesi curve, non devi preoccuparti di ricordare di chiudere il tag del modulo.

+1

La domanda è * quando * sarebbe di aiuto. Dimenticare di chiudere il tag è altrettanto probabile che dimenticare di chiudere la parentesi graffa, quindi qual è il punto? – John

0

Ottima domanda, me ne sono chiesto un po '.

potrei sbagliarmi, ma ecco la mia ipotesi (un uomo migliore può correggermi):

Nei primi giorni di MVC, non c'era il rasoio.

Il passaggio da C#/VB a html è stato difficile per la sintassi, quindi è stato necessario ridurre i confini.

Durante la creazione di moduli, è stato considerato utile creare l'intera forma esclusivamente sul lato C#/VB, senza alcun manuale di interlingling, per avere solo un bordo nel mondo circostante di html.

E poiché i programmatori spesso copiano lo stile di fare le cose da qualche altra parte, la pratica di usare quegli aiutanti è persistita anche se il loro beneficio è scomparso con l'avvento del rasoio.

Problemi correlati