137 votes

MVC sur lequel le bouton d'envoi a été activé

J'ai deux boutons sur mon formulaire MVC:

 <input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
 

À partir de mon action de contrôleur, comment savoir lequel a été pressé?

182voto

WDuffy Points 2912

Nommez les deux boutons d'envoi de la même manière

 <input name="submit" type="submit" id="submit" value="Save" />
<input name="submit" type="submit" id="process" value="Process" />
 

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

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

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

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

    return View();
}
 

51voto

Darin Dimitrov Points 528142
 <input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
 

Et dans votre action de contrôleur:

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

36voto

Yakir Manor Points 1725

c'est une meilleure réponse, de sorte que nous pouvons avoir à la fois du texte et de la valeur d'un bouton:

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

</p>
<button name="button" value="register">Register</button>
<button name="button" value="cancel">Cancel</button>
</p>

et le contrôleur:

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

en bref sa un bouton SOUMETTRE, mais vous choisissez le nom en utilisant le nom de l'attribut, son encore plus puissant parce que vous n'êtes pas obligé de le nom de soumettre ou un bouton dans le contrôleur de paramètres de la méthode, vous pouvez l'appeler comme vous le souhaitez...

1voto

chugh97 Points 2873

Ne pouvez-vous pas savoir utiliser Request.Form Collection? Si le processus est cliqué, le request.form ["processus"] ne sera pas vide

1voto

indyfromoz Points 3452

Je suggère de regarder ce post . J'aime la deuxième solution, car vous programmez la logique dans le contrôleur et non dans la vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X