Quelqu'un peut-il me dire comment puis-je soumettre des valeurs à Controller en utilisant ActionLink et la méthode POST?
Je ne veux pas utiliser de boutons.
Je suppose qu'il y a quelque chose avec jquery.
asp.net-mvc
actionlink
šljaker
la source
la source
Réponses:
Vous ne pouvez pas utiliser un
ActionLink
car cela rend simplement une<a>
balise d' ancrage .Vous pouvez utiliser une publication jQuery AJAX .
Ou appelez simplement la méthode submit du formulaire avec ou sans jQuery (qui ne serait pas AJAX), peut-être en
onclick
cas de contrôle de votre choix.la source
Si vous utilisez ASP MVC3, vous pouvez utiliser un Ajax.ActionLink (), qui vous permet de spécifier une méthode HTTP que vous pouvez définir sur "POST".
la source
jquery.unobtrusive-ajax.min.js
". Sinon, il continuera à faire un GET au lieu d'un POST lorsque vous cliquez dessus. La syntaxe pour créer le lien serait la suivante:@Ajax.ActionLink("Delete", "Delete", new { id = item.Id }, new AjaxOptions {HttpMethod = "POST"})
"data-ajax"="true, "data-ajax-url"=<your link> and "data-ajax-method"="Post"
. Btw, j'utilise ASP.NET MVC 3Vous pouvez utiliser jQuery pour faire un POST pour tous vos boutons. Donnez-leur simplement le même nom CssClass.
Utilisez "return false;" à la fin de votre événement javascript onclick si vous voulez faire un RedirectToAction côté serveur après la publication, sinon renvoyez simplement la vue.
Code du rasoir
Code JQuery
C #
la source
@Aidos avait la bonne réponse, je voulais juste que ce soit clair car elle est cachée dans un commentaire sur son message fait par @CodingWithSpike.
la source
Voici une réponse intégrée au projet ASP.NET MVC 5 par défaut qui, je crois, accomplit bien mes objectifs de style dans l'interface utilisateur. Soumettez le formulaire en utilisant du javascript pur à un formulaire contenant.
Le cas d'utilisation entièrement illustré est une liste déroulante de déconnexion dans la barre de navigation d'une application Web.
la source
ActionLink ne déclenchera jamais le message. Il déclenche toujours la requête GET.
la source
Utilisez ce qui suit le lien Appel à l'action:
Pour soumettre les valeurs du formulaire, utilisez:
Il soumettra les données au contrôleur du client et à l'action CustomerSearchResults.
la source
Utilisez ce lien dans Ajax.BeginForm
;)
la source
Ma solution à ce problème est assez simple. J'ai une page qui effectue une recherche client l'un par l'e-mail entier et l'autre par un partiel, le partiel tire et affiche une liste la liste a un lien d'action qui pointe vers un résultat d'action appelé GetByID et passe l'id
le GetByID extrait les données du client sélectionné puis retourne
quelle est la méthode post
la source
Cela a été un problème difficile à résoudre pour moi. Comment puis-je créer un lien dynamique en rasoir et html qui peut appeler une méthode d'action et transmettre une valeur ou des valeurs à une méthode d'action spécifique? J'ai envisagé plusieurs options, y compris un assistant html personnalisé. Je viens de proposer une solution simple et élégante.
La vue
La méthode d'action
Le point ici est que Url.Action ne se soucie pas de savoir si la méthode d'action est un GET ou un POST. Il accédera à l'un ou l'autre type de méthode. Vous pouvez transmettre vos données à la méthode d'action en utilisant
l'objet routeValues. J'ai essayé ceci et cela fonctionne. Non, vous n'êtes pas techniquement en train de publier un message ou de soumettre le formulaire, mais si l'objet routeValues contient vos données, peu importe qu'il s'agisse d'un message ou d'un get. Vous pouvez utiliser une signature de méthode d'action particulière pour sélectionner la bonne méthode.
la source
J'ai fait le même problème en utilisant le code suivant:
la source
Ceci est ma solution au problème. Ceci est un contrôleur avec 2 méthodes d'action
Dans View, je rends la structure suivante.
Point d'intérêt dans Razor View :
Fonction JavaScript
confirmDelete(id)
qui est appelée lorsque le lien généré avec@Html.ActionLink
est cliqué;confirmDelete()
fonction requise id de l'élément cliqué. Cet élément est passé par leonClick
gestionnaireconfirmDelete("+feedback.Id+");return false;
. Le gestionnaire de prêter attention renvoie false pour empêcher l'action par défaut - qui consiste à obtenir la demande à la cible.OnClick
L'événement pour les boutons pourrait être attaché avec jQuery pour tous les boutons de la liste comme alternative (ce sera probablement encore mieux, car il y aura moins de texte dans la page HTML et les données pourraient être transmises via l'data-
attribut).Form a
id=myForm
, afin de le trouver dansconfirmDelete()
.Le formulaire inclut
@Html.HttpMethodOverride(HttpVerbs.Delete)
pour utiliser leHttpDelete
verbe, comme action marquée avec leHttpDeleteAttribute
.Dans la fonction JS, j'utilise la confirmation d'action (avec l'aide d'un plugin externe, mais la confirmation standard fonctionne bien aussi. N'oubliez pas d'utiliser
bind()
dans le rappel ouvar that=this
(ce que vous préférez).Form a un élément caché avec
id='idField'
etname='id'
. Donc, avant que le formulaire ne soit soumis après confirmation (result==true
), la valeur de l'élément caché est définie sur valeur argument passé et le navigateur soumettra les données au contrôleur comme ceci:URL de la demande :
http://localhost:38874/Feedback/Delete
Méthode de demande : Code d'état POST: 302 trouvé
En-têtes de réponse
Emplacement: / Commentaires Host: localhost: 38874 Form Data X-HTTP-Method-Override: DELETE id: 5
Comme vous le voyez, il s'agit d'une requête POST avec X-HTTP-Method-Override: DELETE et les données du corps sont définies sur "id: 5". La réponse a un code 302 qui redirige vers l'action d'indexation, vous actualisez ainsi votre écran après la suppression.
la source
Je recommanderais de rester fidèle aux principes REST et d'utiliser une suppression HTTP pour vos suppressions. Malheureusement, les spécifications HTML n'ont que HTTP Get & Post. Une balise ne peut qu'un HTTP Get. Une balise de formulaire peut effectuer une récupération HTTP ou une publication. Heureusement, si vous utilisez ajax, vous pouvez faire une suppression HTTP et c'est ce que je recommande. Voir l'article suivant pour plus de détails: Suppressions Http
la source
L'appel de $ .post () ne fonctionnera pas car il est basé sur Ajax. Une méthode hybride doit donc être utilisée à cette fin.
Voici la solution qui fonctionne pour moi.
Étapes: 1. Créez une URL pour href qui appelle la méthode a avec l'URL et le paramètre 2. Appelez le POST normal en utilisant la méthode JavaScript
Solution:
Dans .cshtml:
Remarque: la méthode anonyme doit être enveloppée dans (....) () ie
postGo est défini comme ci-dessous dans JavaScript. Le repos est simple.
@ Url.Action ("View") crée l'URL de l'appel
{'id': @ reception.ReceiptId} crée des paramètres en tant qu'objet qui est à son tour converti en champs POST dans la méthode postGo. Cela peut être n'importe quel paramètre selon vos besoins
En JavaScript:
URL de référence que j'ai utilisées pour postGo
GET / POST non-ajax utilisant jQuery (plugin?)
http://nuonical.com/jquery-postgo-plugin/
la source
jQuery.post()
fonctionnera si vous avez des données personnalisées. Si vous souhaitez publier un formulaire existant, il est plus facile à utiliserajaxSubmit()
.Et vous n'avez pas besoin de configurer ce code dans le
ActionLink
lui même, car vous pouvez attacher un gestionnaire de lien à l'document.ready()
événement (qui est de toute façon une méthode préférée), par exemple en utilisant$(function(){ ... })
jQuery trick.la source
Je suis tombé sur ce besoin de POST depuis une page de recherche (index) vers la page de résultats. Je n'avais pas besoin d'autant que @Vitaliy l'a déclaré, mais cela m'a orienté dans la bonne direction. Tout ce que j'avais à faire était ceci:
Mon contrôleur avait la méthode de signature suivante:
la source
Ceci est tiré de l'exemple de projet MVC
la source