2009-06-24 5 views
0

J'essaie d'obtenir un objet sérialisé json depuis un contrôle utilisateur MVC en utilisant jQuery. Le problème est le retour du résultat est le HTML complet pour la page qui contient mon contrôle. La page et le contrôle utilisent le même contrôleur. J'ai essayé de casser la méthode que j'appelle dans le contrôleur et il ne se fait jamais toucher. J'ai essayé différentes incarnations des appels jQuery Ajax et j'ai obtenu le même résultat.JsonResult renvoie un affichage html plutôt qu'un objet sérialisé lorsqu'il est appelé depuis jQuery Get()

Code jQuery:

<script type="text/javascript"> 
$('#Project_GeneralContractor_Id').change(function() { 
    //alert('<%= Url.Action("GetGeneralContractor", "Projects") %>/1'); 
    $.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) { 
     alert(data); 
    }); 
}); 
</script> 

Code Controller:

public JsonResult GetGeneralContractor(int id) 
{ 
    return Json(_GeneralContractorRepository.Get(id)); 
} 

Où $ ('# Project_GeneralContractor_Id') est une liste déroulante et _GeneralContractorRepository.Get (id) retourne un objet GeneralContractor individuel.

Je ne sais pas ce que je fais, mais je soupçonne le côté jQuery car je n'arrive pas à faire une pause dans le contrôleur.

Répondre

0

Avez-vous essayé d'utiliser getJSON()?

Si ce n'est pas, je vais pencher vers le problème côté serveur. Difficile à deviner sans regarder la page retournée cependant.

+0

getJSON renvoie la même chose. Chose étrange à noter, je viens de réaliser que l'appel frappe mon action d'index dans ce contrôleur. Commencer à penser que c'est un problème de route. – nkirkes

+0

J'ai répondu à ma propre question sur celui-ci, mais puisque vous avez fait allusion à un problème côté serveur (ce qui était le cas), vous méritez le crédit. – nkirkes

0

Vous devez spécifier le type: json (quatrième paramètre facultatif à $ .get). Voir le $.get arguments.

$.get('<%= Url.Action("GetGeneralContractor", "Projects") %>', { id: $('#Project_GeneralContractor_Id').val() }, function(data) { 
     alert(data); 
    }, "json"); 
+0

Je l'avais déjà essayé. Même résultat – nkirkes

+0

@mannish - Avez-vous essayé comme ci-dessus, après le rappel? – karim79

+0

Oui, exactement comme ça. – nkirkes

0

C'était un problème de routage. Mon contrôleur de projets a des cas d'itinéraire spéciaux. J'ai créé un contrôleur séparé pour gérer GeneralContractors et tout va bien.

Questions connexes