2010-11-23 4 views
4

Pour l'instant, je veux juste utiliser HTTP POST pour envoyer json au contrôleur asp.net mvc2.POST Json sans modèle et Ajax

Depuis le JSON est en fait une liste d'objets JSON, et chacun d'eux a des champs différents & longueur, donc c'est difficile pour moi de constituer un modèle d'entrée.

Donc, je veux savoir est-il un moyen pour moi de publier JSON sans model/ajax à un contrôleur dans ASP.NET MVC2?

Répondre

3

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.

1

Vous pouvez stocker JSON dans un champ masqué, puis convertir le JSON en objet dans le contrôleur à l'aide d'un utilitaire. Il doit être dans les données affichées du formulaire afin qu'il soit disponible; stocker dans un champ caché est une approche, ou utiliser AJAX pour le diffuser.

HTH.