¿Cuál es el uso de Html.BeginForm en MVC3. ¿Por qué lo usamos, cuando podemos simplemente agregar una etiqueta de formulario directamente, este helper html agrega alguna capacidad o hace algo que no se puede hacer con una simple etiqueta de formulario.¿Cuál es el uso de Html.BeginForm en MVC3
Respuesta
El método de ayuda Html.BeginForm
contiene un couple overloads cuyo propósito es facilitar la escritura de formularios enrutados. Es consciente de la estructura de MVC y se asegura de que su objetivo sea un controlador y una acción. Es sólo un poco de azúcar sintáctica sobre:
<form method="post" action="@Url.Action(...)">
En palabras de Microsoft:
El marco ASP.NET MVC incluye métodos de ayuda que proporcionan una manera fácil de representar HTML en una vista.
Por supuesto, nadie está haciendo que lo uses. Es solo una cuestión de preferencia. De hecho, en los primeros días de MVC, muchos desarrolladores de WebForms celebraron su nueva libertad de los controles de servidor a-la <asp:TextBox>
y otros, e insistieron en escribir todo a mano.
El uso de los ayudantes para sus campos de formulario es muy recomendable, ya que conocen la validación de formularios. Html.BeginForm
sólo te da una manera consistente para iniciar y terminar su formulario:
@using(Html.BeginForm())
{
@Html.LabelFor(...)
@Html.EditorFor(...)
}
Html.BeginForm
devuelve un objeto IDisposable
, lo que le permite envolver en la declaración de C# using
. Cuando sale el using
, la eliminación llamará automáticamente al Html.EndForm()
. Desde Html.EndForm
rendimientos void
es un poco incómodo para llamar de la maquinilla de afeitar:
@Html.BeginForm()
<formStuff>
@{Html.EndForm();}
Un simple @Html.EndForm()
girará en a Write(Html.EndForm()) -> Write(void)
, es decir, compilar error de tiempo.
Por supuesto se puede codificar a mano, pero tiene varias ventajas, tales como:
- que devuelve un objeto que es desechable, de manera que se puede poner en una cláusula
using
y será cerrar la etiqueta de formulario para que - calcula la dirección URL de la acción del formulario
hace algo que no se puede hacer con una forma sencilla
Al final, cada llamada al método auxiliar se convierte a HTML puro, por lo que no hay nada que Html.BeginForm pueda hacer que no se pueda hacer utilizando directamente la etiqueta <form>
.
Html.BeginForm
es un método puramente de ayuda.
¿Cuál es el propósito de tener ayudantes en absoluto? (Pregunta retórica) También puede escribir todas las entradas manualmente, pero los ayudantes ... bueno, a veces lo ayudo.
todo lo que pone etiqueta.Sí, puede hacerlo de forma manual, o bien puede ser un poco más elegante y hace esto:
@using(Html.BeginForm())
{
}
Esto cerrará la etiqueta de formulario para usted también. Por lo tanto, si mantiene todas sus entradas dentro de los corchetes curvilíneos, no debe preocuparse por recordar el cierre de la etiqueta del formulario.
La pregunta es * cuando * sería útil. Olvidarse de cerrar la etiqueta es tan probable como olvidar cerrar el corchete, entonces, ¿cuál es el punto? – John
Excelente pregunta, me pregunté un poco sobre eso.
puedo estar equivocado, pero aquí está mi suposición (un hombre mejor que me puede corregir):
En los primeros días de MVC, no había máquina de afeitar.
Cambiar entre C#/VB y html fue una sintaxis sólida, por lo que hubo un impulso para minimizar esos bordes.
Al crear formularios, se consideró beneficioso crear todo el formulario puramente en el lado C#/VB, sin mezclar html manual, para tener solo un borde en el mundo circundante de html.
Y dado que los programadores a menudo copian el estilo de hacer las cosas desde otro lugar, la práctica de usar esos ayudantes ha persistido a pesar de que su beneficio ha desaparecido con el advenimiento de la afeitadora.
- 1. MVC3 Html.BeginForm - pasar argumentos como RouteValueDictionary falla
- 2. ¿Cómo pasar el parámetro de consulta y el atributo de clase a Html.BeginForm en MVC3?
- 3. razor pregunta por; al hacer uso (Html.BeginForm())
- 4. ¿Cuál es el uso del uso de init() en JavaScript?
- 5. ¿Cuál es el uso de Log4j API?
- 6. ¿Cuál es el uso de Deployment.Current.Dispatcher.BeginInvoke (() => {...})?
- 7. ¿Cuál es el uso previsto de IllegalStateException?
- 8. ¿Cuál es el uso de "indulgente"?
- 9. ¿Cuál es el uso correcto de DataContext.Refresh()?
- 10. ¿Cuál es el uso de typedef?
- 11. ¿Cuál es el uso de window.external?
- 12. ¿Cuál es el uso de autómatas finitos?
- 13. ¿Cuál es el uso de LOCAL_MODULE_TAGS?
- 14. ¿Cuál es el uso correcto de EnsureChildControls()?
- 15. ¿Cuál es el uso de Indexers?
- 16. ¿cuál es el uso básico de alignment_storage?
- 17. ¿Cuál es el uso de la sintaxis = =?
- 18. ¿Cuál es el uso de @SuppressWarnings
- 19. ¿Cuál es el uso de singletonList?
- 20. ¿Cuál es el uso principal de MarshalByRefObject?
- 21. ¿Cuál es el uso de AtomicReferenceArray?
- 22. ¿Cuál es el uso de - [NSUserDefaults registerDefaults:]?
- 23. ¿cuál es el uso de string.Clone()?
- 24. Html.BeginForm() con el método GET
- 25. Usando Html.BeginForm para publicar en el controlador actual
- 26. ¿Cuál es el propósito del uso?
- 27. Ajax.BeginForm dentro de Html.BeginForm
- 28. MvC3 - el uso de vistas parciales en un área diferente
- 29. Html.BeginForm() tipo de extensión
- 30. ¿cuál es el uso real de la interfaz en java?
¿Qué significa este uso aquí? ¿Está relacionado con el uso de constructo en asp.net que usa para envolver objetos IDisposables? – Charu
Agregué un párrafo a la respuesta. – Kivin