2010-11-05 4 views
0

Je construis une vue recherche dans asp.net MVC 2Dans la méthode HttpPost, comment puis-je savoir quel bouton de formulaire a été cliqué?

J'ai donc:

public ActionResult Search() 
{ 
    ... 
} 


[HttpPost] 
public ActionResult Search(string input, FormCollection formValues) 
{ 
    ... 
} 

Le problème est dans la vue il y a une zone de texte et deux boutons « Recherche » et « Effacer les résultats » .

Une fois entré dans la méthode [HttpPost] comment puis-je travaille sur quel bouton a été cliqué? (Donc, je peux changer la logique d'affichage de recherche &) - ou cela doit-il être un lien à la place?

+0

http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in-asp-net-mvc-framework – Equiso

Répondre

3

formes de réinitialisation sur le côté client.

Utiliser pour le bouton de soumission de formulaire. Utilisez type = "reset" pour le bouton de réinitialisation.

Sinon, utilisez javascript pour câbler le bouton de réinitialisation.

2

Si les boutons sont des balises INPUT et que vous les avez attribué des valeurs « nom », ils seront réaffectés à votre FormCollection. Vous verrez le "buttonName" = "valeur" dans votre tableau. Il suffit de vérifier la collection pour la clé appropriée et vous saurez ce qui a été pressé.

Une autre façon de le faire est d'avoir une entrée cachée au sein de votre formulaire et lorsque clique sur le bouton « A », farcir une valeur dans l'entrée cachée des utilisateurs. Si l'utilisateur clique sur le bouton "B", placez une valeur différente dans votre saisie. Lorsque vous revenez sur votre serveur, vérifiez simplement quelle valeur a l'entrée cachée.

3

J'ai développé ce petit ActionMethodSelectorAttribute rapide

public class AcceptParameterAttribute : ActionMethodSelectorAttribute 
{ 
    public string Name { get; private set; } 

    public AcceptParameterAttribute(string name) 
    { 
     Name = name; 
    } 

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) 
    { 
     HttpRequestBase req = controllerContext.HttpContext.Request; 
     return req.Form[Name] != null; 
    } 
} 

Vous pouvez l'utiliser sur vos actions comme ce

[HttpPost] 
[AcceptParameter("submitBtnName")] 
public ActionResult Search() 
Questions connexes