MVC Envoyer la liste par AJAX
Ok, j'ai vu des tonnes de questions posées à ce sujet, mais aucune réponse n'a effectivement travaillé pour moi, voici mon AJAX:
$.ajax({
url: "/FilterSessions/GetFilterSession",
type: "GET",
dataType: "json",
data: jsonFilters,
traditional: true,
success: function (response) {
//Haha, it's never entering here. not really.
}
});
var "jsonFilters" contient un tableau avec les données suivantes:
[0] = { Path: "Test", Name: "More testing", Value: "Test Value" },
[1] = { Path: "Test", Name: "More testing", Value: "Test Value" }
Et c'est mon contrôleur:
public ActionResult GetFilterSession(List<FilterSessionModel> jsonFilters)
{
//Do things
return Json(false, JsonRequestBehavior.AllowGet);
}
jsonFilters reste toujours nul... j'ai aussi essayé d'ajouter contentType: "application/json; charset=utf-8"
à l'appel AJAX... mais ça n'a pas vraiment quoi que ce soit
Enfin, la classe FilterSessionModel
est structuré comme suit:
public class FilterSessionModel
{
public string Path { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
Aucune idée de ce que j'ai peut-être manquant ou ce qui se passe?
Choses que j'ai essayé jusqu'à présent:
Paramètre "traditionnel: true", le réglage "contentType", à l'aide de JSON.stringify et de tenter d'accepter une chaîne de caractères dans le MVC Contrôleur (no-go)
Mise à JOUR: Merci pour la réponse ci-dessous, j'ai réalisé que ce qui manquait, c'était d'envoyer plus de données avec le param Id comme ceci:
data: "{param1ID:"+ param1Val+"}"
OriginalL'auteur Halaster | 2013-09-14
Vous devez vous connecter pour publier un commentaire.
Je pense que ce que vous cherchez est la réponse ici:
OriginalL'auteur aximili
Je voudrais essayer de changer le type de votre action.
Assez sûr que ci-dessus n'est pas d'aller travailler, je voudrais essayer quelque chose comme Objet.
Ou éventuellement une chaîne que je puis utiliser newton json dll de pousser dans votre Liste de Classe.
Le problème se résume à votre action, incapable de comprendre le type, en supposant que vous de vérifier vos données avant l'ajax obtenir d'être appelé.
**Mise à jour en raison de plus d'infos. Ajouter dans l'erreur de part et d'afficher ces revendeurs à valeur ajoutée sur le retour de votre contrôleur, également tirer fiddler et de regarder ce que votre pour http numéros.
Vous êtes évidemment arriver à votre contrôleur, si vous voyez les données sont nulles. J'essayais juste de passage d'une chaîne, une chaîne simple et voir si ça passe, si oui, alors vous avez certainement des problèmes avec votre appel ajax, je vais ajouter quelque chose au-dessus dans la réponse.
Fait intéressant, si je passe une chaîne de caractères le contrôleur n'est toujours pas en recevoir. (Je n'ai pas oublier de modifier le contrôleur de recevoir une chaîne de caractères)... C'est assez étrange vraiment
Yep, vous avez réduit. Je voudrais ajouter que gestionnaire d'erreur, et sur ajax postes et obtient fiddler est votre meilleur ami.
OriginalL'auteur Bill Blankenship
javascript ou ajax appel n'type de fonte de l'objet. . .vous devez définir le type de contrôleur de côté paramètre une chaîne ou une Liste d'autre vous pouvez également définir le type d'Objet. . Si vous avez modifié codein cette façon.. .Votre code certainement le travail !!!
OriginalL'auteur Sanket
Tout d'abord je suis en train de faire l'hypothèse que votre
$.ajax
est pourJQuery
et pas sur un autre framework Javascript. Veuillez me corriger si c'est faux.ASP.NET MVC peut réellement faire ce que vous demandez pour (résoudre des données envoyées via AJAX pour un
List<FilterSessionModel>
, mais il semble avoir un moment difficile de le faire via une requête GET. Il est utile de connaître la version de ASP.NET MVC vous êtes en utilisant, comme de plus en plus est nécessaire pour le faire fonctionner sur les anciennes versions. Cependant, ce que je suggère, doit travailler sur MVC 3 ou 4.Lorsque vous envoyez AJAX via JQuery en utilisant une requête GET et en passant un tableau JavaScript, c'est ce que vous envoyez sur le serveur:
Il n'est pas étonnant que le modèle est nulle, car aucune donnée n'est en cours d'expédition.
Je crois ASP.NET peut accepter des objets (et même les tableaux d'objets), comme cela, mais il ne peut pas le faire avec elle formatées en JSON (comme via JSON.stringify) qui vient de résultats de la requête suivante:
La façon dont vous voulez probablement faire c'est avec une requête POST. ASP.NET MVC accepter une chaîne JSON POST données et de les décoder et de résoudre le modèle correctement. Votre code AJAX fonctionne très bien avec un couple de modifications:
Le contrôleur que vous avez posté devraient reconnaître publier des données déjà, mais au cas où cela n'est pas le cas, un simple
[HttpPost]
attribut est tout ce dont vous avez besoin:OriginalL'auteur cmcquillan
OriginalL'auteur Athul Nalupurakkal