So che XHTML non supporta tag di moduli nidificati e ho già letto altre risposte qui su Stack Overflow in merito a questo argomento, ma non ho ancora trovato una soluzione elegante al problema.
Alcuni dicono che non ne hai bisogno e che non riescono a pensare a uno scenario se questo fosse necessario. Beh, personalmente non riesco a pensare a uno scenario in cui non ne ho avuto bisogno.
Vediamo un esempio molto semplice:
Stai creando un'app blog e hai un modulo con alcuni campi per la creazione di un nuovo post e una barra degli strumenti con "azioni" come "Salva", "Elimina", "Annulla".
<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>
Il nostro obiettivo è scrivere il modulo in un modo che non richiede JavaScript , solo un semplice vecchio modulo HTML e inviare pulsanti.
Poiché l'URL dell'azione è definito nel tag Modulo e non in ogni singolo pulsante di invio, la nostra unica opzione è quella di pubblicare su un URL generico e quindi iniziare "se ... quindi ... altro" per determinare il nome del pulsante che è stato inviato. Non molto elegante, ma la nostra unica scelta, dal momento che non vogliamo fare affidamento su JavaScript.
L'unico problema è che premendo "Elimina", verranno inviati TUTTI i campi del modulo sul server anche se l'unica cosa necessaria per questa azione è un input nascosto con il post-id. Non è un grosso problema in questo piccolo esempio, ma ho moduli con centinaia (per così dire) di campi e schede nelle mie applicazioni LOB che (a causa dei requisiti) devono presentare tutto in una volta e in ogni caso questo sembra molto inefficiente e uno spreco. Se l'annidamento dei moduli fosse supportato, sarei almeno in grado di racchiudere il pulsante di invio "Elimina" all'interno del suo modulo con solo il campo post-ID.
Si può dire "Basta implementare" Elimina "come collegamento anziché inviare". Ciò sarebbe sbagliato in così tanti livelli, ma soprattutto perché le azioni con effetti collaterali come "Elimina" qui, non dovrebbero mai essere una richiesta GET.
Quindi la mia domanda (in particolare a coloro che affermano di non aver bisogno di nidificare i moduli) è: cosa fai? C'è qualche soluzione elegante che mi manca o la linea di fondo è davvero "O richiede JavaScript o invia tutto"?