J'essaie de passer un tableau (ou IEnumerable) d'entiers de via AJAX à une action MVC et j'ai besoin d'un peu d'aide.
le javascript est
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
et l'action du contrôleur est
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
Au moment où la requête est formatée comme
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Donc j'y suis presque, si je supprime les crochets, j'obtiens la bonne réponse. Comment dois-je passer ce tableau dans mon get afin que le contrôleur puisse reconnaître ce que c'est?
Merci beaucoup pour votre aide
Dave
c#
asp.net-mvc
jquery
Dave
la source
la source
J'ai eu des problèmes dans le passé en essayant d'effectuer un POST (je ne sais pas si c'est exactement ce que vous faites, mais je me souviens que lorsque vous passez un tableau, traditional doit être défini sur true .
la source
Une réponse assez tardive, mais différente de celles déjà présentes ici:
Si au lieu de
$.ajax
vous souhaitez utiliser des fonctions abrégées$.get
ou$.post
, vous pouvez passer des tableaux de cette façon:Raccourci GET
POST sténographique
Remarques:
$.param
est pour latraditional
propriété, qui DOIT êtretrue
pour que cela fonctionne .la source
Vous devriez pouvoir le faire très bien:
Alors votre méthode d'action serait comme ceci:
Pour vous, il semble que vous ayez juste besoin de stringifier vos valeurs. Le JSONValueProvider dans MVC le reconvertira en un IEnumerable pour vous.
la source
La réponse pour utiliser l'option «traditionnelle» est correcte. Je fournis juste quelques informations de fond supplémentaires pour ceux qui souhaitent en savoir plus.
Depuis la documentation jQuery:
Vous pouvez également en lire plus ici: http://michaelsync.net/2012/04/05/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers et http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
HTH
la source
SI TOUS LES AUTRES ÉCHOUENT ...
Aucune des autres réponses ici n'a résolu mon problème. J'essayais de faire un appel de méthode GET de JavaScript à un contrôleur d'API Web MVC et d'envoyer un tableau d'entiers en tant que paramètre dans cette demande. J'ai essayé toutes les solutions ici, mais le paramètre de mon contrôleur montait toujours NULL (ou Nothing pour les utilisateurs de VB).
J'ai finalement trouvé ma solution dans un autre article SO , et c'était en fait très simple: il suffit d'ajouter l'
[FromUri]
annotation avant le paramètre array dans le contrôleur ( j'ai également dû faire l'appel en utilisant le paramètre AJAX "traditionnel" pour éviter les annotations entre crochets ). Voir ci-dessous pour le code réel que j'ai utilisé dans mon application.Signature du contrôleur:
REMARQUE: l'annotation en C # serait
[FromUri]
JavaScript:
Chaîne URL réelle:
la source
Un peu tard ici, mais je pourrais utiliser la solution de SNag plus loin dans $ .ajax (). Voici le code si cela peut aider n'importe qui:
la source
Si vous migrez vers ASP.NET Core MVC à partir de .Net Framework MVC comme je l'étais, les choses ont légèrement changé. L'appel ajax doit être sur l'objet brut en utilisant stringify donc plutôt que de passer des données de
{ vals: arrayOfValues }
celui - ci devrait êtreJSON.stringify(arrayOfValues)
comme suit:L'autre modification qui a été apportée dans ASP.NET Core consiste à empêcher la falsification des demandes intersites.Ainsi, pour les appels à une action MVC à partir d'une méthode ajax, l'
[FromBody]
attribut doit être appliqué au paramètre d'action comme suit:la source
Si vous utilisez ASP.NET Core MVC et que vous devez gérer les crochets (plutôt que d'utiliser l'option "traditionnelle" de jQuery), la seule option que j'ai trouvée est de créer manuellement
IEnumerable
la méthode du contrôleur.la source
Je travaille avec asp.net core 2.2 et jquery et je dois soumettre un objet complexe («classe principale») d'une vue à un contrôleur avec des champs de données simples et quelques tableaux.
Dès que j'ai ajouté le tableau dans la définition de la `` classe principale '' c # (voir ci-dessous) et soumis le tableau (correctement rempli) sur ajax (post), l'objet entier était nul dans le contrôleur.
Tout d'abord, j'ai pensé que le "traditionnel: vrai" manquant à mon appel ajax était la raison, mais ce n'est pas le cas.
Dans mon cas, la raison était la définition dans la «classe principale» c #.
Dans la `` classe principale '', j'avais:
et EreignisTagNeu a été défini comme:
J'ai dû changer la définition de la `` classe principale '' en:
Maintenant ça marche.
Donc ... pour moi, il semble que asp.net core ait un problème (avec post), si la liste d'un tableau n'est pas complètement définie dans la «classe principale».
Remarque: dans mon cas, cela fonctionne avec ou sans "traditional: true", à l'appel ajax
la source
Vous devez convertir Array en chaîne:
cela fonctionne même sous forme d'int, long ou string
la source