Sur la base de la réponse de Brian, nous avons fait exactement cela. Gardez à l'esprit ceci est JQuery 1.4.2
Ceci est un peu éclaté et pourrait être simplifié, mais il utilise des rappels au lieu de plein sur les messages. Il était initialement utilisé pour filtrer les résultats en temps réel et recharger la première page dans la même zone. D'abord, nous avons le bouton/lien/quoi que ce soit sur la page. Cela va appeler javascript pour construire les données JSON.
<input type="button" alt="Update" onclick="doStuff();" />
Ensuite, nous avons la fonction doStuff(). Dans ce cas, les raffinements sont une collection d'objets json. Ensuite, nous avons une forme ajax avec un champ caché dans lequel doStuff() place nos données. Cela pourrait aussi être une vieille forme régulière.
<% using (Ajax.BeginForm("MyAction", "MyController", new { },
new AjaxOptions { },
new { id = "filteredResultsForm" }))
{ %>
<input type="submit" id="update-button" style="display:none;" />
<%= Html.Hidden("jsonData")%>
<% } %>
Ainsi, le clic est appelé sur ce bouton, ce qui provoque le rappel au serveur. Voici notre action dans le contrôleur. JsonSerializer fait partie de Newtonsoft.Json
public ActionResult MyAction(string jsonData)
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(jsonData);
Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr);
JsonRequest jsonRequest = (JsonRequest)serializer.Deserialize(reader, typeof(JsonRequest));
//do work with object
return View();
}
JsonRequest doit être un objet de classe, et toutes les propriétés, sous-classes et leurs propriétés, et ainsi de suite et ainsi de suite doivent être sérialisable pour que cette approche fonctionne. Malgré le retour d'un ensemble de données fluide (comme une collection d'objets json), et sans vraiment voir à quoi ces données ressemblent, je suis à peu près certain que vous pourriez concevoir une sorte de structure de classe pour soutenir vos données.