2011-04-11 21 views
11

MVC pregunta para novatos; Estoy aprendiendo jugando un poco en lugar de leer el manual ... :)MVC: ¿a qué código se llama cuando hace clic en el botón "enviar"?

veo cuando creo una "Editar" opinión de que la vista generada automáticamente incluye un botón "enviar":

<input type="submit" value="Save" /> 

Pero, ¿qué código se llama detrás de escena para hacer esto guardar? Específicamente, el modelo que subyace a esta vista tiene su propia lógica de guardado de fantasía en el código que me gustaría llamar. ¿Cómo obtengo la vista para invocar mi código en lugar de cualquier código estándar que se llame invisiblemente entre bastidores?

+2

La lectura del manual será más rápida :) El tutorial de nerddinner es ideal para comenzar con mvc. – raklos

Respuesta

5

Llamaría al método de acción pública al que apunta la acción de formulario en su controlador. A continuación, puede llamar guardar en el modelo de vista.

public virtual ActionResult Save(MyViewModel model) { 
     model.Save();    

     --- more code to do stuff here 
    } 

Indica tu acción de formulario a MyController/Save

También puede utilizar using (Html.BeginForm... en el código para señalar la forma a un método de acción específica en un controlador específico.

3

llama al método de acción definidos en la parte de acción del elemento de forma por ejemplo:

<form action="/Account/LogOn" id="loginForm" method="post"> 

La acción LogOn en el controlador cuenta será invocado en esta forma

0

El ViewPage tiene una BeginForm Método using (Html.BeginForm() en la parte superior que representaría el FormTag. Este método tiene una sobrecarga que toma Nombre de la acción y Nombre del controlador. Entonces puede especificar la acción en su controlador que debe ser llamado.

+1

No es cierto, llama a la acción posterior del mismo método que está viendo actualmente. – Jimmy

+0

@Jimmy: Gracias por corregir. En caso de que no haya una acción posterior especificada para el método que invocó la vista, ¿a qué acción se llamará? – Novice

+0

Si está en el formulario de acción 'login' de forma predeterminada, publicará en la misma acción para que se publique en acción' login', creo que lo hace en función de su ruta actual al crear el formulario – Jimmy

5

Al hacer clic en el botón Enviar, la solicitud va al Módulo HTTp que lo dirige a la acción correspondiente del controlador. cuando se crea la vista de edición de la plantilla de la dirección de entrada del formulario es el mismo que el formulario de edición es decir, si usted está visitando/home/editar puede ver la siguiente código HTML en la etiqueta inicial del formulario

<form method="post" action="/home/edit"> 

puede tener otra acción método que sólo acepta solicitudes de correos como

[HttpPost] 
public ActionResult Edit(int id, ViewModel model) 
{ 
     //put your logic here handling submitted values 
} 

HttpPost atributo indica que sólo se encargará de solicitud posterior en lugar de quedar solicitados que sirve para hacer la forma

11

es no el botón de que multas lo que sucede, pero la forma en sí. El botón de enviar tipo (uno por formulario) solo desencadena el envío del formulario, que es manejado por el formulario mismo.

un formulario tiene una acción - por ejemplo:

<form name="input" action="users/save" method="post"> 
    <!-- Form content goes here --> 
    <input type="submit" value="Submit" /> 
</form> 

La acción es un URL y lo que sucede es que el navegador recoge los valores de todos los campos del formulario (<input...>) y los postes a la especificada url.

En ASP.NET Los formularios MVC generalmente se definen utilizando los helpers Html, por lo que la construcción de la URL para la acción del formulario se delega a ASP.NET MVC.Por lo anterior, por ejemplo:

<% using(Html.BeginForm("Save", "Users")) %> 
<% { %> 
    <!-- Form content goes here --> 
    <input type="submit" value="Save" /> 
<% } %> 

que en este caso va a crear una URL /users/save y forma a publicar a esa URL. Eso en términos desencadenará el enrutamiento ASP.NET que manejará la url /users/save y la dividirá en fragmentos para que sepa que tiene que invocar el método de acción "Guardar" en la clase de controlador "Usuarios". Luego leerá todos los pares de nombre-valor de campo entrante e intentará asignarlos a los nombres de parámetro de método, si los hay.

+0

¿Qué pasa si Html.BeginForm() no tiene parámetros? ¿Cuál es el comportamiento predeterminado? Controlador actual e índice ?? – KirstieBallance

+0

Sí. BeginForm sin parámetros envía un HTTP POST a la URL actual. Ver: http://stackoverflow.com/a/16744311/381082 – DeveloperDan

Cuestiones relacionadas