2011-06-25 3 views
2

J'appelle une méthode ajax comme ci-dessousAsp.net ajax avec MVC2

var srchText = "Chicago"; 


$.ajax({ 
    url: "/Ajax/GetCities", 
    data: "{'srchText' : '" + srchText + "'}", 
    dataType: "json", 
    type: "POST", 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    dataFilter: function (data) { return data; }, 
    success: function (data) { 
     cityList = data.d; 
    } 
}); 

L'URL pointe vers un contrôleur MVC, comme ci-dessous,

[HttpPost] 
    public ActionResult GetCities(string srchText) 
    { 
     List<City> result = new List<City>(); 
     EventsBIZ objBIZ = new EventsBIZ(); 
     result = objBIZ.ToList<City>(objBIZ.GetCities(srchText)); 
     return this.Json(new GetEventsResponse() { d = result }, JsonRequestBehavior.AllowGet); 
    } 

Il y a quelque chose de mal avec le code , que la méthode est appelée avec succès, mais le srchText arrive comme nul. S'il vous plaît aidez-moi à comprendre que Wat a mal tourné. Merci d'avance

Ajout de la requête suivie depuis firebug. FireBug Net monitor

+0

Wh A quoi ressemblent tes routes? Ne pourriez-vous pas utiliser ("/ Ajax/GetCities /" + srchText)? –

+0

mis à jour avec la capture d'écran firebug. Je veux l'envoyer en tant qu'objet JSON, progressivement je veux faire l'entrée en tant que classe complexe. Donc, l'envoyer à travers l'url ne m'aidera pas. – Raghav

Répondre

4

La raison pour laquelle votre code ne fonctionne pas parce que par défaut ASP.NET MVC 2 ne comprennent JSON demandes. Il n'y a rien d'intégré qui vous permette d'envoyer une requête au format JSON et que cette requête est réexaminée en un argument d'action fortement typé. Cette fonctionnalité est intégrée par défaut à partir de ASP.NET MVC 3. Jetez un oeil à la following blog post. Vous aurez besoin de mettre en œuvre un JsonValueProviderFactory si vous voulez faire ce travail sous ASP.NET MVC 2.

également au lieu de:

data: "{'srchText' : '" + srchText + "'}", 

vous devez utiliser:

data: JSON.stringify({ srchText: srchText }), 

Le JSON.stringify est natif pour les navigateurs modernes, et pour les plus âgés, vous devrez peut-être inclure json2.js.

Une autre possibilité si vous ne voulez pas mettre en œuvre un JsonValueProviderFactory est d'utiliser une demande application/x-www-form-urlencoded standard que le modèle de liaison par défaut peut comprendre:

$.ajax({ 
    url: '/Ajax/GetCities', 
    data: { srchText: srchText }, 
    type: 'POST', 
    async: false, 
    dataType: 'json', 
    dataFilter: function (data) { return data; }, 
    success: function (data) { 
     cityList = data.d; 
    } 
}); 
+0

U a frappé le clou sur la tête. Encore une question. Lorsque je modifie l'entrée d'un objet au lieu d'une chaîne et que j'utilise le classeur par défaut, l'envoi d'un objet javascript normal arrive sur le serveur. Mais les propriétés de l'objet sont défalquées (comme dans int à 0 et string à null). Une idée de comment envoyer l'objet sans jsonvalueproviderfactory? – Raghav

0

Je ne pense pas que vous passez JSON valide, essayez d'utiliser:

data: {"srchText" : srchText}, 
+0

nopes .. toujours comme nulle ... – Raghav

1

vous n'avez pas à envoyer srchText comme json becuase vous va simplement envoyer une chaîne peut donc envoyer sous forme de chaîne de requête

essayer cette

var srchText = "Chicago"; 


$.ajax({ 
url: "/Ajax/GetCities", 
data: 'srchText=' + srchText , 
type: "POST", 
async: false, 
dataFilter: function (data) { return data; }, 
success: function (data) { 
    cityList = data.d; 
} 
});