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
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.EndForm
void
è 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.
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
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.
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.
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
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.
- 1. Come passare il parametro di query e l'attributo di classe a Html.BeginForm in MVC3?
- 2. Qual è la migliore soluzione di soluzione MVC3?
- 3. Come scrivere "Html.BeginForm" in Razor
- 4. Perché WebViewPage è astratto in MVC3?
- 5. Qual è la differenza tra MVC 2 e MVC3
- 6. qual è lo scopo di Viewbag in mvc3 e in che modo siamo in MVC
- 7. Come funziona @ Html.BeginForm()?
- 8. Ajax.BeginForm all'interno Html.BeginForm
- 9. Html.BeginForm con più htmlAttributes
- 10. Html.BeginForm() con metodo GET
- 11. Utilizzare il metodo DELETE in Html.BeginForm()?
- 12. UserControl equivalente in MVC3?
- 13. Qual è il modo corretto di stampare attributi/testo HTML con le virgolette in Razor/MVC3?
- 14. Qual è la classe base di una visualizzazione del rasoio in ASP.NET MVC3
- 15. Qual è la posizione dell'editor e dei modelli di visualizzazione predefiniti in Asp.net MVC3?
- 16. Html.BeginForm perde routeValues con FormMethod.GET
- 17. Html.BeginForm utilizzando onSubmit per convalidare
- 18. Come passare l'ID con Html.BeginForm()?
- 19. Html.BeginForm() con un URL assoluto?
- 20. Attivazione dell'animazione di caricamento mediante invio Html.BeginForm
- 21. Html.BeginForm routing a Web Api
- 22. MVC3 ValidationAttribute validationContext.memberName è null
- 23. MVC 5 Html.BeginForm senza modello
- 24. MVC3 .valid() è sempre true
- 25. NUOVO modello di controller T4 in MVC3
- 26. MVC3: Qual è il modo migliore per ottenere il percorso di visualizzazione da un oggetto HtmlHelper?
- 27. MVC3 + Ninject: Qual è il modo corretto di iniettare l'IPrincipal dell'utente?
- 28. Utilizzando Server.MapPath in MVC3
- 29. Utilizzando Page.User.Identity.Name in MVC3
- 30. CheckBoxList in MVC3
Cosa significa questo qui, è relativo all'utilizzo del costrutto in asp.net che usi per avvolgere oggetti IDisposable? – Charu
Ho aggiunto un paragrafo alla risposta. – Kivin