2009-02-11 19 views
6

Je suis en train de passer un texte d'une zone de texte à un contrôleur pour obtenir des résultats JSON comme sijquery getJSON ne passe pas toutes les valeurs au contrôleur

function invokeAction() { 
     var searchText = $("#SearchTextBox").val(); 

     // Invoke MVC controller action 
     $.getJSON("/Home/Results/" + searchText, bindResults); 
    } 

Si je mets une alerte ici, je peux voir que searchText a certainement une valeur, mais quand je mets un point d'arrêt sur cette action du contrôleur:

public ActionResult Results(string search) 
    { 
     var r = from t in db.Restaurants 
       where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%") 
       orderby t.Name ascending 
       orderby t.Rating descending 
       orderby t.NumOfViews 
        descending 
       select t; 

     return Json(r.ToList()); 
    } 

la chaîne passée en est nulle, mais quand je vérifie le contexte http dans le débogueur mon searchtext est une partie de l'URL.

Comme la valeur est nulle, la requête ne renvoie aucun résultat.

Ai-je oublié quelque chose ici?

Répondre

9

J'ai eu quelques problèmes pour renvoyer json des services et je n'ai reçu aucun appel. il s'est avéré que le json était mal formé et j'ai pu tester cela et obtenir ces erreurs en manipulant l'option d'erreur de l'appel simple d'ajax.

$.ajax({ 
    type: "GET", 
    url: "Home/Results/", 
    data: { search: searchText }, 
    dataType: "json", 
    error: function(xhr, status, error) { 
    // you may need to handle me if the json is invalid 
    // this is the ajax object 
    }, 
    success: function(json){ 
    alert("Data Returned: " + json); 
    } 
}); 
+0

Merci, j'ai utilisé cela et ai piégé une erreur. J'ai aussi utilisé firebug qui m'a dit que j'avais une référence circulaire. Je pense que j'ai besoin de trier ma base de données un peu. – ddd

+0

Cool, je suis content, alors est-ce que j'ai la réponse? – bendewey

+0

Oui bendewey, vous pouvez obtenir la réponse;) – ddd

2

Vous devrez corriger votre itinéraire et remplacer {id} avec {} recherche afin de l'obtenir pour se lier au paramètre correct - essayer quelque chose comme ceci:

routes.MapRoute("search", "Home/Results/{search}", 
    new { controller = "Home", action = "Results" }); 

Si vous ne voulez pas pour ce faire, vous pouvez le faire comme ceci en spécifiant le parametername comme norme querystring paramter

$.getJSON("/Home/Results?search=" + searchText,bindresults); 

qui fixe la liaison.

+0

Je l'ai changé t0 .getJSON $ ("/ Accueil/Résultats /", {recherche: searchText}, la fonction (données) {alert ("g"); movieView.set_data (données);}) où la boîte d'alerte est là pour le débogage. La chose est qu'il n'est jamais atteint. Si je mets un point d'arrêt sur le contrôleur, il renvoie un résultat JSON. Des idées? – ddd

+0

En fait, il appelle cette fonction, mais seulement si le contrôleur ne renvoie aucun résultat. Je ne pense pas que les données set soient appelées quand je le souhaite. Aurais-je besoin d'effacer les anciennes données? – ddd

+0

essayer un basique return Json (new {result = "hello"}); et voir si cela fonctionne –

Questions connexes