2009-10-11 8 views
1

J'utilise la méthode getJSON de JQuery pour récupérer certaines données d'un contrôleur MVC.

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult GetContacts(int? numberOf) 
    { 
     List<Contact> contacts = 
      (numberOf != null && numberOf > 0) ? 
       _provider.GetContacts(Convert.ToInt32(numberOf)): 
       _provider.GetContacts(); 

     return Json(contacts); 
    } 

L'idée, est que je peux utiliser cette méthode de commande pour fournir à la fois tous les contacts, ou un certain nombre de contacts si « numberOf » est fourni.

Le problème est que "numberOf" dans mon contrôleur est toujours null lorsque j'envoie la requête GET à "Contacts/GetContacts/5". Cependant, si j'envoie la requête GET à "Contacts/GetContacts /? NumberOf = 5" cela fonctionne comme prévu.

Si elle aide, voici la méthode javascript:

getContacts: function(numberOf){ 
    var path = "/Contact/GetContacts/"; 
     path = (numberOf<=0) ? path : "/Contact/GetContacts/" + numberOf; 

    $.getJSON(path, null, 
     function(json){ 
     $.each(json, function(){  
     $('tbody','#contacts').append(
      "<tr id=\"contact-"+ this.Id +"\">" 
      + "<td>"+ this.Id +"</td>" 
      + "<td>"+ this.FirstName +"</td>" 
      + "<td>"+ this.LastName +"</td>" 
      + "</tr>" 
     ); 
     }); 
    }); 
    }, 

Répondre

2

Vous avez probablement un problème de routage - essayez d'appliquer une ou l'autre de ces deux corrections:

  1. (facile, mais peut-être un peu laid)
    Renommez le paramètre numberOf en id, pour qu'il soit détecté par l'itinéraire par défaut.

  2. (un peu plus de travail, mais votre code sera mieux - au moins dans cette méthode)
    Ajouter l'itinéraire suivant à votre colleciton d'itinéraire dans Global.asax.cs:

    routes.MapRoute(
        "ContactsRoute", 
        "Contacts/GetContacts/{numberOf}", 
        new { controller = "Contacts", action = "GetContacts", numberOf = null } 
    ); 
    
+0

Ne pensez pas que c'est correct. Si numberOf était égal à 10, le chemin serait: "/Contact/GetContact/10" ... il n'y a aucune référence à numberOf ou id dans cette approche. Ajouter {numberOf} à la table de routage ne fera rien. Corrigez-moi si j'ai tort, s'il-vous plait. – Amir

+0

ressemble certainement à un problème de routage si le passage de la chaîne de requête fonctionne. – scottm

+0

J'ai d'abord pris la première approche, car j'avais déjà défini une route. Votre première suggestion a fonctionné, alors vous nous avez raison de dire que c'est un problème de routage. La cause première était que j'avais défini mon itinéraire en dessous de la route par défaut, au lieu de le dépasser. La requête était donc routée vers la route par défaut et le contrôleur ne pouvait pas correspondre au paramètre car il attendait 'Id' et non 'numberOf'. Merci Tomas! – Kappers

Questions connexes