2012-07-25 30 views
19

¿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

29

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.

+0

¿Qué significa este uso aquí? ¿Está relacionado con el uso de constructo en asp.net que usa para envolver objetos IDisposables? – Charu

+0

Agregué un párrafo a la respuesta. – Kivin

4

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
4

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.

2

¿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.

+1

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

0

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.

Cuestiones relacionadas