¿Podemos usar múltiples formularios en una página web?

Hasta ahora, todas las páginas web que encontré contienen como máximo una etiqueta

. ¿Por qué no múltiples? No puedo pensar en razones por las que múltiples formularios no pueden coexistir dentro de la misma página web.

Además, para ser específico de ASP.NET, ¿por qué todos los controles del servidor se colocan dentro de la etiqueta

? ¿Por qué no los colocas en otro lugar?

Más,

Noté que en un archivo .aspx , la etiqueta

tiene el atributo runat = server , mientras que un control de servidor normal como Button también tiene uno. Entonces parece que

también es un control de servidor . Pero, curiosamente, no puedo encontrarlo en Visual Studio Toolbox.

Puede haber formas múltiples, con hacks .

De hecho, es una deficiencia de WebForms. En ASP.NET MVC puede implementar tantos formularios como desee (y es un comportamiento válido y correcto de las páginas web).

La razón por la cual todos los controles del servidor se colocan dentro de la etiqueta

es permitir que el motor de WebForms los reconozca, cargue sus valores y guarde sus valores desde / hacia ViewState. Casi toda la infraestructura de administración de control en WebForms se basa en la idea de que una etiqueta contiene todo lo que se accede desde el código subyacente.

Como se señaló, esta es una de las deficiencias de WebForms. Quiero señalar, además, que con la publicación cruzada de páginas y grupos de validación , normalmente puede alcanzar su comportamiento deseado (para la mayoría de las soluciones de “múltiples formas”).

En cuanto a la pregunta adicional:

se analiza como clase HtmlForm detrás de las escenas, que hereda de HtmlControl como cualquier otro elemento HTML con runat="server" .

Sin embargo, a diferencia de cualquier otro HtmlControl, solo puede existir una instancia por página y no aparece en la caja de herramientas, ya que se agrega automáticamente a cada nuevo Formulario que cree, por lo que no tiene sentido.

Sí, se puede hacer creando un objeto HtmlForm personalizado y alternando los formularios según sea necesario. Acabo de responder una pregunta similar aquí (con código):

Paypal Form Ruins Mi diseño de formularios web ASP.NET -> ¿Cómo resolverlo?

muchos formularios que no son servidores: puede, pero solo un formulario runAt Server

También encontré esto:

Una etiqueta de formulario del lado del servidor es la etiqueta que tiene un atributo runat = “server”. Si este atributo falta, entonces es una etiqueta de formulario HTML típica. La conclusión es que puede usar múltiples tags de formulario en una página, siempre que solo una tenga el atributo runat = “server”. La desventaja de la forma que no tiene este atributo es que el estado de la vista no funcionará (lo que significa que los valores del formulario desaparecerán al usar los botones del navegador hacia atrás / adelante). Es un precio pequeño a pagar si realmente necesita formularios múltiples en una página.

  1. Tome la página maestra y establezca el diseño.
  2. Tome un formulario en la página maestra.
  3. La segunda forma contiene el marcador de posición.
  4. En contener el marcador de posición solo para escribir la etiqueta del formulario (no usar)
  5. Agregue la página aspx y diseñe el segundo formulario, pero no escriba la etiqueta del formulario solo para el control puesto
  6. Tomar el botón clic en el evento código de fuego escribir

Esta es la forma correcta de dos formas