2009-06-07 13 views
24

Ho una forma su uno dei miei punti di vista ASP.Net MVC che ho creato utilizzando il seguente codiceASP.Net MVC, Inviare un modulo utilizzando JavaScript

<% using (Html.BeginForm(null, null, FormMethod.Post)) 

Utilizzando questo codice non ho alcun controllo per quanto Sono a conoscenza dell'impostazione del nome del modulo. Ora sto provando a scrivere una funzione javascript per inviare il modulo, è possibile senza conoscere il nome del modulo?

Grazie

risposta

53

È possibile utilizzare jQuery per inviare il modulo:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm"})) { %> 

(l'ultima parte è per il parametro htmlAttributes)

solo fare questo:

$("#myForm").submit(); 

e non dimenticare di includere jquery-1.2.6.js fornito con mvc (o usare una versione più alta).

+0

Mi piace quanto sia facile MVC fa cose come questa. –

+0

O una parentesi è fuori posto o le cose sono cambiate un po 'dal 2009! Questo è ciò che ha funzionato per me usando la sintassi del Razor: ** @ using (Html.BeginForm (null, null, FormMethod.Post, new {id = "form"})) ** [Modifica: Ho appena notato che ajbeaven ha sottolineato questo in un'altra risposta] –

2

Se avete solo una forma in quella pagina, è possibile accedere al modulo utilizzando:

document.forms[0]. 

Così si potrebbe aggiungere un link:

<a href="javascript:document.forms[0].submit()">submit form</a> 
1

Se è necessario impostare il nome di il modulo, utilizzare il parametro oggetto htmlAttributes del metodo BeginForm.

<% using 
    (Html.BeginForm(null, null, FormMethod.Post, 
    new {name="MySuperForm"})) %> 

Per presentare forme attraverso JavaScript, controlla this post. Potrebbe essere utile.

1

Questa semplice soluzione inviate il formulario Ajax senza postback

<a href="#" onclick="$('#sbmt').trigger('click'); return false">Generate</a> 
<input id="sbmt" type="submit" style="visibility: hidden" /> 

Lavori in IE e Firefox.

9

Se si desidera utilizzare jQuery senza nominare la forma, e si avrà un solo modulo nella pagina, si può semplicemente aggiungere un link come questo alla vostra pagina:

<a href="#" class="submitForm">Submit</a> 

E poi aggiungere questo jQuery che cablare il link per inviare ogni forma:

$(document).ready(function() { 
    $("a.submitForm").click(function() { 
     $("form").submit(); 
    }); 
}); 

Quindi questo è un modo di farlo (il modo in cui l'ho fatto sul mio sito), che non richiede per il nome del modulo - purché ne abbiate solo uno. Dicendo questo, potresti voler inviare più moduli ..

+0

Soluzione lucida. amava questa risposta +1 – dblood

+0

'.submit()' causa il reindirizzamento alla vista restituita dal metodo di controllo 'POST'. È possibile inviare senza reindirizzamento? – Yoda

+0

È possibile ottenere il controller per restituire la stessa vista con dati diversi, quindi mostrare all'utente una sorta di risposta.Se non desideri che la pagina venga ricaricata del tutto, puoi abbandonare del tutto il modulo e associare invece un modello di visualizzazione Knockout alla pagina e quindi inviare i dati al controller utilizzando una chiamata jQuery ajax - che ti consentirebbe di pubblicare al controller senza pubblicare un modulo nel senso classico. –

Problemi correlati