Il existe trois façons de résoudre le problème ci-dessus
- Manière HTML
- Jquery way
- Méthode "ActionNameSelectorAttribute"
Vous trouverez ci-dessous une vidéo qui résume les trois approches de manière démonstrative.
https://www.facebook.com/shivprasad.koirala/videos/vb.100002224977742/809335512483940
Manière HTML: -
De la manière HTML, nous devons créer deux formulaires et placer le bouton «Soumettre» à l'intérieur de chacun des formulaires. Et l'action de chaque formulaire pointera vers des actions différentes / respectives. Vous pouvez voir le code ci-dessous que le premier formulaire affiche sur «Action1» et le second formulaire sera affiché sur «Action2» en fonction du bouton «Soumettre» sur lequel vous avez cliqué.
<form action="Action1" method=post>
<input type=”submit” name=”Submit1”/>
</form>
<form action="Action2" method=post>
<input type=”submit” name=”Submit2”>
</form>
Voie Ajax: -
Si vous êtes un amoureux de l'Ajax, cette deuxième option vous exciterait davantage. De la manière Ajax, nous pouvons créer deux fonctions différentes "Fun1" et "Fun1", voir le code ci-dessous. Ces fonctions feront des appels Ajax en utilisant JQUERY ou tout autre framework. Chacune de ces fonctions est liée aux événements «OnClick» du bouton «Soumettre». Chacune de ces fonctions appelle les noms d'actions respectifs.
<Script language="javascript">
function Fun1()
{
$.post(“/Action1”,null,CallBack1);
}
function Fun2()
{
$.post(“/Action2”,null,CallBack2);
}
</Script>
<form action="/Action1" method=post>
<input type=submit name=sub1 onclick=”Fun2()”/>
</form>
<form action="/Action2" method=post>
<input type=submit name=sub2 onclick=”Fun1()”/>
</form>
Utilisation de "ActionNameSelectorAttribute": -
C'est une excellente option et propre. «ActionNameSelectorAttribute» est une classe d'attributs simple où nous pouvons écrire une logique de prise de décision qui décidera quelle action peut être exécutée.
Donc, la première chose est en HTML, nous devons mettre le nom correct sur les boutons de soumission pour les identifier sur le serveur.
Vous pouvez voir que nous avons mis «Enregistrer» et «Supprimer» dans les noms des boutons. Vous pouvez également remarquer dans l'action que nous venons de mettre le nom du contrôleur «Client» et non un nom d'action particulier. Nous nous attendons à ce que le nom de l'action soit décidé par «ActionNameSelectorAttribute».
<form action=”Customer” method=post>
<input type=submit value="Save" name="Save" /> <br />
<input type=submit value="Delete" name="Delete"/>
</form>
Ainsi, lorsque le bouton d'envoi est cliqué, il frappe d'abord l'attribut "ActionNameSelector", puis en fonction de la soumission qui est déclenchée, il appelle l'action appropriée.
La première étape consiste donc à créer une classe qui hérite de la classe «ActionNameSelectorAttribute». Dans cette classe, nous avons créé une simple propriété "Nom".
Nous devons également remplacer la fonction "IsValidName" qui renvoie true ou flase. Cette fonction est l'endroit où nous écrivons la logique si une action doit être exécutée ou non. Donc, si cette fonction renvoie true, l'action est exécutée, sinon elle ne l'est pas.
public class SubmitButtonSelector : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
{
// Try to find out if the name exists in the data sent from form
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
}
}
Le cœur principal de la fonction ci-dessus est dans le code ci-dessous. La collection «ValueProvider» contient toutes les données qui ont été publiées à partir du formulaire. Il recherche donc d'abord la valeur "Nom" et s'il est trouvé dans la requête HTTP, il renvoie vrai ou bien il renvoie faux.
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
Cette classe d'attributs peut ensuite être décorée sur l'action respective et la valeur «Nom» respective peut être fournie. Donc, si la soumission frappe cette action et si le nom correspond au nom du bouton de soumission HTML, il exécute ensuite l'action autrement ou non.
public class CustomerController : Controller
{
[SubmitButtonSelector(Name="Save")]
public ActionResult Save()
{
return Content("Save Called");
}
[SubmitButtonSelector(Name = "Delete")]
public ActionResult Delete()
{
return Content("Delete Called");
}
}