MVC quel bouton d’envoi a été pressé

J’ai deux boutons sur mon formulaire MVC:

  

De mon action de contrôleur, comment puis-je savoir lequel a été pressé?

Nommez les deux boutons Soumettre de la même manière

   

Ensuite, dans votre contrôleur, obtenez la valeur de submit. Seul le bouton cliqué passera sa valeur.

 public ActionResult Index(ssortingng submit) { Response.Write(submit); return View(); } 

Vous pouvez bien sûr évaluer cette valeur pour effectuer différentes opérations avec un bloc de commutation.

 public ActionResult Index(ssortingng submit) { switch (submit) { case "Save": // Do something break; case "Process": // Do something break; default: throw new Exception(); break; } return View(); } 
   

Et dans votre action de contrôleur:

 public ActionResult SomeAction(ssortingng submit) { if (!ssortingng.IsNullOrEmpty(submit)) { // Save was pressed } else { // Process was pressed } } 

c’est une meilleure réponse, nous pouvons donc avoir du texte et de la valeur pour un bouton:

http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

     

et le contrôleur:

 public ActionResult Register(ssortingng button, ssortingng userName, ssortingng email, ssortingng password, ssortingng confirmPassword) { if (button == "cancel") return RedirectToAction("Index", "Home"); ... 

en bref c’est un bouton SUBMIT mais vous choisissez le nom en utilisant l’atsortingbut name, c’est encore plus puissant car vous n’êtes pas obligé de soumettre le nom ou le bouton dans les parameters de la méthode du contrôleur, vous pouvez l’appeler comme vous voulez …

vous pouvez identifier votre bouton à partir de là tag tag comme ci-dessous, vous devez vérifier comme ça dans votre contrôleur

 if (Request.Form["submit"] != null) { //Write your code here } else if (Request.Form["process"] != null) { //Write your code here } 

Voici un moyen très simple de le faire avec des instructions très faciles à suivre en utilisant un MultiButtonAtsortingbute personnalisé:

http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx

Pour résumer, créez vos boutons de soumission comme ceci:

   

Vos actions comme ceci:

 [HttpPost] [MultiButton(MatchFormKey="action", MatchFormValue="Cancel")] public ActionResult Cancel() { return Content("Cancel clicked"); } [HttpPost] [MultiButton(MatchFormKey = "action", MatchFormValue = "Create")] public ActionResult Create(Person person) { return Content("Create clicked"); } 

Et créer cette classe:

 [AtsortingbuteUsage(AtsortingbuteTargets.Method, AllowMultiple = false, Inherited = true)] public class MultiButtonAtsortingbute : ActionNameSelectorAtsortingbute { public ssortingng MatchFormKey { get; set; } public ssortingng MatchFormValue { get; set; } public override bool IsValidName(ControllerContext controllerContext, ssortingng actionName, MethodInfo methodInfo) { return controllerContext.HttpContext.Request[MatchFormKey] != null && controllerContext.HttpContext.Request[MatchFormKey] == MatchFormValue; } } 
 // Buttons   // Controller [HttpPost] public ActionResult index(FormCollection collection) { ssortingng submitType = "unknown"; if(collection["submit"] != null) { submitType = "submit"; } else if (collection["process"] != null) { submitType = "process"; } } // End of the index method 

Pour faciliter les choses, je dirai que vous pouvez changer vos boutons de la manière suivante:

   

Votre contrôleur:

 public ActionResult Create(ssortingng btnSubmit, ssortingng btnProcess) { if(btnSubmit != null) // do something for the Button btnSubmit else // do something for the Button btnProcess } 

Ce post ne va pas répondre à Coppermill, car il a été répondu depuis longtemps. Mon message sera utile pour qui cherchera une solution comme celle-ci. Tout d’abord, je dois dire que “la solution de WDuffy est totalement correcte” et que cela fonctionne bien, mais ma solution (pas la mienne) sera utilisée dans d’autres éléments et rendra la couche de présentation plus indépendante du contrôleur (votre contrôleur dépend “valeur” qui est utilisé pour afficher l’étiquette du bouton, cette fonctionnalité est importante pour d’autres langues.)
Voici ma solution, donnez-leur des noms différents, comme:

       

`
Et vous devez spécifier les noms des boutons comme arguments dans l’action comme ci-dessous:

  public ActionResult Register(ssortingng buttonSave, ssortingng buttonProcess, ssortingng buttonCancel){if (buttonSave!= null) {//save is pressed } if (buttonProcess!= null) {//Process is pressed } if (buttonCancel!= null) {//Cancel is pressed } 

lorsque l’utilisateur soumet la page en utilisant l’un des boutons, un seul des arguments aura une valeur. Je suppose que cela sera utile pour les autres.
Mettre à jour
Cette réponse est assez ancienne et je reconsidère mon opinion. peut-être que la solution ci-dessus est bonne pour la situation qui passe le paramètre aux propriétés du modèle. ne vous embêtez pas et prenez la meilleure solution pour votre projet.

Donnez le nom aux deux boutons et récupérez la valeur du formulaire.

 

Côté contrôleur:

 public ActionResult Save(FormCollection form) { if (this.httpContext.Request.Form["cancelButton"] !=null) { // return to the action; } else if(this.httpContext.Request.Form["submitButton"] !=null) { // save the oprtation and retrun to the action; } } 

Ne pouvez-vous pas trouver à l’aide de Request.Form Collection? Si le processus est cliqué, le fichier request.form [“process”] ne sera pas vide