Tengo dos botones en mi formulario MVC:
<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
Desde mi acción Controlador, ¿cómo sé cuál ha sido presionado?
c#
asp.net
asp.net-mvc
razor
Coppermill
fuente
fuente
<input name="submit" type="submit" id="submit" value="Save" onclick="saveMethod" />
:?Respuestas:
Nombra ambos botones de envío de la misma manera
Luego, en su controlador, obtenga el valor de envío. Solo el botón que se haga clic pasará su valor.
Por supuesto, puede evaluar ese valor para realizar diferentes operaciones con un bloque de interruptores.
fuente
<button type="submit" name="action" value="draft"> Internationalized Save Text </button>
para fines de i18n, por lo que el usuario que enfrenta la cadena es personalizable y los nombres de los elementos de formulario nunca se exponen directamente al usuario (lo cual es extraño en sí mismo)Y en su acción de controlador:
fuente
esta es una mejor respuesta, por lo que podemos tener tanto texto como valor para un botón:
http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx
y el controlador:
en resumen, es un botón ENVIAR, pero usted elige el nombre usando el atributo de nombre, es aún más poderoso porque no está obligado a enviar el nombre o al botón en los parámetros del método del controlador, puede llamarlo como lo desee ...
fuente
Puede identificar su botón desde allí la etiqueta de nombre como a continuación, debe marcar así en su controlador
fuente
Aquí hay una manera muy agradable y sencilla de hacerlo con instrucciones realmente fáciles de seguir utilizando un MultiButtonAttribute personalizado:
http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx
Para resumir, haga que sus botones de envío sean así:
Tus acciones como esta:
Y crea esta clase:
fuente
MultiButtonAttribute
atributo personalizado para permitir la diferenciación entre los botones de envío. En realidad es una buena idea.Arnis L.
hubiera seguido el mismo consejo, es posible que haya notado que él proporcionó exactamente el mismo enlace 4 años antes:>fuente
Para hacerlo más fácil, diré que puede cambiar sus botones a lo siguiente:
Su controlador:
fuente
Esta publicación no va a responder a Coppermill, porque le han respondido hace mucho tiempo. Mi publicación será útil para quién buscará una solución como esta. En primer lugar, tengo que decir "La solución de WDuffy es totalmente correcta" y funciona bien, pero mi solución (no la mía) se utilizará en otros elementos y hace que la capa de presentación sea más independiente del controlador (porque su controlador depende de "valor" que se utiliza para mostrar la etiqueta del botón, esta función es importante para otros idiomas).
Aquí está mi solución, dales diferentes nombres:
Y debe especificar los nombres de los botones como argumentos en la acción como a continuación:
cuando el usuario envía la página usando uno de los botones, solo uno de los argumentos tendrá valor. Supongo que esto será útil para otros.
Actualizar
Esta respuesta es bastante antigua y en realidad reconsidero mi opinión. tal vez la solución anterior sea buena para la situación que pasa el parámetro a las propiedades del modelo. no se molesten y tomen la mejor solución para su proyecto.
fuente
input[type=submit]
valor que se activó, por lo que todos los modelos pueden vincularse a una propiedad con la mismaname
(ej.action
) Y luego puede diferenciar los botones en funciónvalue
de esa cadena sin la necesidad de introducir tantas variables en su firma . Por favor, tómese un tiempo para pensar en formatear / sangrar antes de publicar.¿No puedes averiguarlo usando Request.Form Collection? Si se hace clic en el proceso, request.form ["proceso"] no estará vacío
fuente
Dé el nombre a ambos botones y obtenga el cheque del valor del formulario.
En el lado del controlador:
fuente
En las páginas Core 2.2 Razor, esta sintaxis funciona:
fuente
string submit
escriturastring submit = Request.Form["Submit"];
. Uno de los mayores beneficios de Razor Pages y / o MVC es la legibilidad de los métodos, de lo contrario podría ser PHP.