web-dev-qa-db-fra.com

Appel d'une action spécifique d'un contrôleur en cliquant sur le bouton HTML (bouton Ne pas soumettre ou sur le formulaire du formulaire) Asp.net MVC

Lorsque nous cliquons sur le bouton d'envoi d'un formulaire, l'action du contrôleur ayant l'attribut HTTPPost est appelée, mais je ne peux pas appeler ou effectuer une action lorsqu'un bouton HTML normal est cliqué Bien que les articles suivants 

http://www.codeproject.com/Tips/198477/Calling-a-MVC-Controller-and-Action-Method-using-H

Bouton HTML appelant un contrôleur MVC et une méthode d'action

indique l'approche mais les deux utilisent le nom du contrôleur dans la vue. Donc, vue doit savoir sur le contrôleur, je cherche une réponse que vue n'aura pas à connaître sur le contrôleur. car les vues doivent être indépendantes du contrôleur , Les vues ne doivent pas connaître le contrôleur Donc, si vous connaissez la réponse, répondez-le

8
Yogesh Joshi

toute forme qui dirige votre utilisateur à l'URL créée par 

<a href='@Url.Action("{action}", "{controller}")'> click me </a> 

ou

@using(BeginForm("{action}", "{controller}")

fera ce que vous voulez. 

Cela peut être avec un 

  • forme 
  • lien de bouton

C'est la destination qui compte. La vue ne "sait" rien de l'action ou du contrôleur. L'assistant fait.

16
Dave Alperovich

Pour exécuter une action MVC du côté client (c'est-à-dire depuis une vue), vous devez cliquer sur une URL (avec n'importe quel verbe: get, post, put, etc.). Par conséquent, pour exécuter une action à partir d'une vue, vous allez Vous devez connaître l'URL de cette action. Par défaut, cette URL est directement mappée sur le controllername/actionname, mais vous pouvez la redéfinir si vous souhaitez créer davantage d'abstraction entre la vue et le contrôleur. 

Compte tenu de cela, votre bouton doit simplement être un lien vers une URL ou un lien vers js pour effectuer une demande http Ajax. 

J'espère que cela pourra aider. 

0
Ben

Vous ne pouvez pas avoir 2 actions sur le même contrôleur avec le même nom et le même verbe HTTP. Donc, ce que vous demandez n'a pas de sens. Vous pouvez appeler la même action de contrôleur que celle qui a rendu la vue sans spécifier d'action et le nom du contrôleur. La raison pour laquelle Html.BeginForm() fonctionne sans spécifier d'action ni de nom de contrôleur est que le formulaire envoie une demande POST au serveur et que vous pouvez distinguer les 2 actions.

0
Darin Dimitrov