Sé que XHTML no admite etiquetas de formulario anidadas y ya he leído otras respuestas aquí en Stack Overflow con respecto a este tema, pero aún no he encontrado una solución elegante para el problema.
Algunos dicen que no lo necesita y que no pueden pensar en un escenario en el que esto sería necesario. Bueno, personalmente no puedo pensar en un escenario en el que no lo haya necesitado.
Veamos un ejemplo muy simple:
Está creando una aplicación de blog y tiene un formulario con algunos campos para crear una nueva publicación y una barra de herramientas con "acciones" como "Guardar", "Eliminar", "Cancelar".
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
Nuestro objetivo es escribir el formulario de una manera que no requiera JavaScript , simplemente un formulario HTML antiguo y botones de envío.
Dado que la URL de acción se define en la etiqueta del formulario y no en cada botón de envío individual, nuestra única opción es publicar en una URL genérica y luego comenzar "if ... then ... else" para determinar el nombre del botón que fué enviado. No es muy elegante, pero es nuestra única opción, ya que no queremos confiar en JavaScript.
El único problema es que al presionar "Eliminar", se enviarán TODOS los campos del formulario en el servidor, aunque lo único que se necesita para esta acción es una entrada oculta con la identificación posterior. No es gran cosa en este pequeño ejemplo, pero tengo formularios con cientos (por así decirlo) de campos y pestañas en mis aplicaciones LOB que (debido a los requisitos) tienen que enviar todo de una vez y, en cualquier caso, esto parece muy ineficiente y un desperdicio. Si se admitiera la anidación de formularios, al menos sería capaz de ajustar el botón de envío "Eliminar" dentro de su propio formulario con solo el campo post-id.
Puede decir "Simplemente implemente" Eliminar "como un enlace en lugar de enviar". Esto sería incorrecto en muchos niveles, pero lo más importante es que las acciones de efectos secundarios como "Eliminar" aquí, nunca deberían ser una solicitud GET.
Entonces mi pregunta (particularmente para aquellos que dicen que no han necesitado anidar) es ¿Qué haces TÚ? ¿Hay alguna solución elegante que me falta o la conclusión es realmente "¿Requiere JavaScript o enviar todo"?