Passer JSON pour MVC 3 Action
Je suis en train d'essayer de soumettre JSON d'un MVC action. Ce que je veux, c'est prendre l'objet JSON, puis accéder à ses données. Le nombre de JSON champs de varier à chaque fois donc j'ai besoin d'une solution qui permettra de gérer tous les cas.
C'est mon POST à mon action, l'adresse pourrait avoir 3 champs ou 20 varient sur chaque poste.
Mise à jour: je vais aller dans un peu plus en détail. Je suis en train d'utiliser l'API LinkedIn, je vais être envoyé au format JSON qui ressemble à du JSON à la fin de cette page : lien. J'ai besoin de créer une Action qui va accepter cette JSON qui varie pour chaque personne.
var address =
{
Address: "123 rd",
City: "Far Away",
State: "Over There"
};
$.ajaxSetup({ cache: false });
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Account/GetDetails/",
data: JSON.stringify(address),
dataType: "json",
success: function () {
alert("Success from JS");
}
});
C'est mon action dans MVC, j'ai besoin d'être appliquer pour prendre n'importe quel objet JSON est passé et d'accéder à ses champs.
[HttpPost]
public ActionResult GetDetails(object address)
{
//address object comes in as null
@ViewBag.Successs = true;
return View();
}
FormCollection
au lieu d'une object
?J'ai juste essayé d'utiliser FormCollection adresse, mais il vient toujours comme nulle.
Vous pouvez utiliser ma solution [ici][1]. Propre et facile [1]: stackoverflow.com/questions/12069171/...
OriginalL'auteur Eilimint | 2011-08-12
Vous devez vous connecter pour publier un commentaire.
Je ne crois pas que personne en disant cela, donc je vais essayer. Votre code comme ceci
En général, vous pouvez ajouter ces propriétés possibles dans la classe Personnelles (ou ce que vous pouvez lui donner un nom). Mais, selon linkedin API, vous aurez besoin d'un outil pour générer les données de classe en raison de sa complexité. Je pense xsd.exe peut aider si vous pouvez obtenir le fichier xsd (ou vous pouvez même générer des fichier xsd xml)
OriginalL'auteur Tae-Sung Shin
Supprimer
data: JSON.stringify(address)
avecdata: address
Méthode d'Action
Comme vous l'avez dit votre objet de données peut contenir 20 des accessoires, afin d'éviter la création de 20 paramètres, vous pouvez utiliser formscollection comme ci-dessous
si vous êtes à la suppression des 'stringify", alors ce que vous envoyez n'est PAS Json - c'est juste la forme de paramètres.
OriginalL'auteur Praveen Prasad
Ne sais pas si cela va fonctionner (jamais fait cela moi-même), mais vous pouvez essayer de la signature suivante:
Je suis effectivement très intéressé moi-même pour voir ce qui va se passer ensuite. Ou, comme le suggère le commentaire par Kristof Claes, utiliser un
FormCollection
.Deuxième, quand ce genre de choses arrivent, il faut toujours vérifier si le navigateur envoie les données que vous avez prévu pour le serveur. IE9 et Chrome soutenir cette sortie de la boîte, sinon vous pouvez utiliser un outil comme Fiddler.
MODIFIER: Juste essayé par moi-même avec un
dynamic
paramètre et qui ne fonctionne pas.. Le runtime type du paramètre estobject
donc tout ce que vous avez soumis est perdu. Vous feriez mieux deutilisation
FormCollection
.Vous devez créer un modèle dynamique liant pour que cela fonctionne
OriginalL'auteur Ronald Wildenberg
Je crois que vous pouvez utiliser un
FormCollection
pour cela.Je vais aller dans un peu plus en détail. Je suis en train d'utiliser l'API LinkedIn, je vais être envoyé au format JSON qui ressemble à du JSON à la fin de cette page : lien. J'ai besoin de créer une Action qui va accepter cette JSON qui varie pour chaque personne.
OriginalL'auteur Kristof Claes
Est peut-être juste une faute de frappe, mais vous appelez
GetDetails
ActionResult, mais encore votre code estLinkedIn
?OriginalL'auteur Tim B James
Vous avez besoin d'envelopper votre objet JSON dans le nom de paramètre que vous attendez dans votre méthode d'action. Quelque chose comme ceci:
Puis dans votre méthode d'action, ce faire:
OriginalL'auteur Malevolence
De mon point de vue est que toutes les réponses sont en quelque sorte de droit.
Que vous ne connaissez pas le nombre de choses que vous envoyez, utiliser formcollection sur le serveur. Mais aussi supprimer le stringfy de l'appel ajax. Ces moyens, les données seront envoyées à l'aide de www-encodage.
Si vous wnat pour envoyer des n objets adresse, changement de la mvc action en paramètre un tableau d'adresse des objets et de les utiliser stringfy.
Cela pourrait aider? stackoverflow.com/questions/2849872/...
J'ai eu la FormCollection de travail, mais seulement par la suppression de la stringfy et l'envoi des données sous forme de chaîne. Cependant je n'aurai pas de contrôler la façon dont les données sont envoyées. Je vais juste avoir à l'accepter comme un JSON à partir de LinkedIn
lorsque vous appelez le mvc action, vous avez déjà la réponse json à partir de LinkedIn. Vous pouvez envoyer ce comme un string & processus sur le serveur.
OriginalL'auteur Simon Halsey
C'est comment je le fais. J'ai un MyProject.De modèle.Les entités et je sérialiser en utilisant [ParamSerializationFilter] attribut sur la méthode d'action.
Code complet ici: https://gist.github.com/3b18a58922fdd8d5a963
OriginalL'auteur Anuj
Vous êtes en train de faire trop de travail! Vous pouvez passer le JSON Littérale directement sur le serveur et d'accéder aux éléments via les paramètres de méthode d'action, comme ceci:
Remarque: Cela ne fonctionne que si votre action params sont nommés exactement le même que votre JSON Littérale attributs.
FormCollection
. Vous avez raison en disant qu'il est inutile de transformer le JSO littérale à une chaîne.Si j'utilise l'Action params que cela fonctionne, mais si j'ai 20 + paramètre choses deviennent confuses, ce sera probablement croître encore plus dans l'avenir. Aussi, si le JSON littéraux envoyé à moi où à modifier mon code va s'écrouler.
OriginalL'auteur slandau