2011-08-30 12 views
16

Inserisco l'istruzione form iniziale/finale nella pagina di layout in modo che non debba ripeterlo su più pagine. Di seguito è una versione semplificata del codice.è possibile annidare un modulo all'interno di un altro nel rasoio?

@using(Html.BeginForm()) 
{ 
    @RenderBody() 

    <input type = "submit" name = "nextButton" value = "Next-->" /> 
} 

Le cose funzionano bene. Purtroppo, ho una pagina con diversi pulsanti "Elimina". Voglio generare un modulo per ciascun pulsante di eliminazione in modo che possa inviare l'id dell'elemento da eliminare al controller.

Posso farlo sapendo che c'è già un altro modulo in più?

Grazie per l'aiuto

+0

Interessante .. "Inserisco l'istruzione form iniziale/finale nella pagina di layout ..." Sembra che tu sia un passo nel percorso di ricreare i webform. ;) – NotMe

+0

@Chris Lively: divertente ??? Bene con tutto il TagBuilder con cui ho avuto a che fare, non sapevo cos'altro fare. – Richard77

risposta

20

Come dice Mrchief, le specifiche HTML vietano le forme annidate. Dato che MVC genera solo HTML standard, devi lavorare all'interno della struttura delle specifiche.

Perché non creare solo due layout principali e utilizzarne uno basato il più delle volte, ma usarne uno senza un modulo quando è necessario un maggiore controllo sui moduli incorporati.

Questo è il motivo per cui si dovrebbero utilizzare solo le forme esattamente dove sono necessarie, non solo ovunque.

+0

In realtà ero più vicino a quello che hai appena proposto. Semplicemente non ho ereditato quella pagina dal layout e ha funzionato. Ma ho dovuto copiare/incollare tutto dal layout alla pagina che dovrebbe contenere tutti i pulsanti di cancellazione. Ma ho intenzione di avere un altro layout come suggerito. – Richard77

+1

@ Richard77 - Si noti che è possibile nidificare * layout * pure. Quindi, puoi avere il tuo layout standard, senza forma. Quindi puoi avere un altro layout che utilizza la prima pagina come layout, ma include il modulo. Quindi puoi scegliere di creare un layout per le pagine dei tuoi clienti. In questo modo, non è necessario duplicare il codice. –

8

Do notare che la nidificazione delle forme non è consentito secondo la W3 specs

Ogni modulo deve essere racchiuso all'interno di un elemento FORM. Ci possono essere diversi moduli in un singolo documento, ma l'elemento FORM non può essere nidificato .

C'è un articolo intersettoriale sui caveat delle forme di nidificazione here.

In questo caso, è preferibile generare un form per ciascun pulsante anziché un singolo modulo.

I moduli Web ASP.Net impedivano di disporre di più moduli sulla pagina utilizzando l'attributo runat=server (e il framework che garantiva che solo uno per pagina era consentito). MVC forms sono in puro HTML, quindi puoi avere più di essi.

Problemi correlati