2009-06-07 17 views
24

Tengo un formulario en una de mis puntos de vista ASP.Net MVC que creé usando el siguiente códigoASP.Net MVC, Presentar un formulario utilizando Javascript

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

Utilizando este código no tengo ningún control en lo Estoy al tanto de establecer el nombre del formulario. Ahora estoy tratando de escribir una función de JavaScript para enviar el formulario, ¿es esto posible sin conocer el nombre del formulario?

Gracias

Respuesta

53

Puede utilizar jQuery para enviar el formulario:

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

(la última parte es para el parámetro htmlAttributes)

a hacer esto:

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

y no olvide incluir jquery-1.2.6.js que viene con mvc (o use una versión superior).

+0

Me encanta lo fácil que MVC hace cosas como esta. –

+0

¡O tiene un soporte fuera de lugar o las cosas han cambiado un poco desde 2009! Esto es lo que funcionó para mí usando la sintaxis de Razor: ** @ using (Html.BeginForm (null, null, FormMethod.Post, new {id = "form"})) ** [Editar: Acaba de notar que ajbeaven señaló esto en otra respuesta] –

2

Si sólo tiene una forma en esa página, se puede acceder al formulario utilizando:

document.forms[0]. 

por lo que podría añadir un enlace:

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

Si tiene que establecer el nombre de el formulario, use el parámetro htmlAttributes del objeto del método BeginForm.

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

Para la presentación de formas a través de JavaScript, visita this post. Podría ser útil.

1

Esta sencilla solución envíe el formulario Ajax y sin post-vuelta

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

Obras en IE y Firefox.

9

Si desea utilizar jQuery sin nombrar a la forma, y ​​usted sólo tendrá un formulario en la página, puede simplemente añadir un enlace como este a su página:

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

Y luego agregar este jQuery que cablear el enlace para enviar cada formulario:

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

Así que esta es una manera de hacerlo (la forma en que acabo de hacer en mi sitio) que no requiere que nombre la forma - siempre que solo tenga uno. Dicho esto, es posible que desee enviar varios formularios ...

+0

Slick solution. Me encantó esta respuesta. +1 – dblood

+0

'.submit()' provoca el redireccionamiento a la vista devuelta por el método del controlador 'POST'. ¿Es posible enviar sin redirigir? – Yoda

+0

Puede hacer que el controlador devuelva la misma vista con diferentes datos y luego muestre al usuario algún tipo de respuesta.Si no desea que la página se vuelva a cargar, puede deshacerse del formulario y vincular un modelo de vista de Knockout a la página, y luego publicar los datos en el controlador mediante una llamada jQuery ajax, que le permitiría publicar al controlador sin publicar una forma en el sentido clásico. –

Cuestiones relacionadas