J'ai vu plusieurs discussions à ce sujet et j'ai essayé toutes les réponses ( ASP.NET MVC JsonResult return 500 )
Ma demande ajax est en train de retourner une erreur interne 500. Si je débogue je n'arrive même jamais à mon action.
Voici mon appel ajax:
$.ajax({
url: '@Url.Action("UpdateSortOrder", "FormItems")',
data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId },
type: 'POST',
success: function (data) {
console.log(data);
},
error: function (xhr, status, exception) {
console.log("Error: " + exception + ", Status: " + status);
}
});
Et mon action:
[HttpPost]
public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId)
{
FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId);
return Json(updatedItem, JsonRequestBehavior.DenyGet);
}
En utilisant la console chrome, voici les en-têtes de réponse de la réponse:
HTTP/1.1 500 Erreur de serveur interne Cache-Control: private Type de contenu: text/html; charset = utf-8 Serveur: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: mar 18 déc 2012 21:53:41 GMT Longueur du contenu: 17041
Les journaux du serveur n’indiquent aucun code de sous-état. Une idée de ce que je fais mal ici? J'ai préféré utiliser POST au lieu de GET.
Les données de formulaire sont affichées comme suit:
itemToUpdateId: 18ac5399-342e-4a39-9da1-3281a89501df
newParentItemId: null
newPreviousItemId: null
Qui est correct.
J'ai essayé de définir contentType sur application/json et traditional = true comme dans cette question: L'envoi d'un message ajax à mvc avec "application/json; charset = utf-8" renvoie l'erreur 500 de vs serveur de développeur Web
Même erreur.
Eh bien, j’ai pu comprendre le problème, il n’y avait aucun problème avec ma syntaxe AJAX, ni même avec l’action. C'était juste que mon objet retourné contenait une référence circulaire. J'ai pu voir l'erreur réelle dans la console chrome en cliquant sur la requête POST sous l'onglet Réseau, puis en affichant l'onglet de prévisualisation. Cela affiche le message d'erreur réel.
Fiddler est un excellent outil pour capturer les requêtes http, très utile pour le débogage des réponses entre le côté client et le côté serveur. Il suffit de l’ouvrir lorsque vous soupçonnez le problème dans votre navigateur, et lorsque l’erreur se produit, ouvrez le violoneur et choisissez la demande, puis affichez ses informations brutes.
Ancien post, réponse alternative ... Juste au cas où quelqu'un finirait ici ...
Mon problème était dû au fait que l'action de mon contrôleur que j'appelais renvoyait un résultat d'action de vue partielle et que le fichier PartialView .cshtml
n'était pas publié sur le serveur (il n'était pas "inclus" dans le projet Visual Studio lors de la publication).
si vous n'avez pas besoin de updatedItem en cas de succès, ne renvoyez pas le résultat, mais retournez une simple variable.