jQuery et ASP.NET MVC : publication d'un tableau d'objets complexes avec JSON
Problème :
Comment transmettre un tableau d'objets complexes à un contrôleur ASP.NET MVC à partir d'une requête jQuery AJAX ? Quels paramètres l'action du contrôleur doit-elle accepter ?
Solution :
Pour publier un tableau d'objets complexes sur un contrôleur à l'aide de jQuery et JSON, suivez ces étapes :
Sérialiser le tableau en JSON :
Utiliser JSON.stringify() pour convertir le tableau d'objets en chaîne JSON.
Définissez les en-têtes de requête :
Spécifiez le type de contenu en-tête vers application/json ; charset=utf-8.
Utilisez la méthode $.ajax() :
Créez une requête AJAX à l'aide de $.ajax() méthode et fournissez les données JSON comme paramètre de données.
Contrôleur Action :
Décorez l'action de votre contrôleur avec un attribut personnalisé (JsonFilter) pour désérialiser les données JSON. L'attribut doit spécifier le nom du paramètre et le type de données JSON.
Attribut personnalisé (JsonFilter) :
public class JsonFilter : ActionFilterAttribute { public string Param { get; set; } public Type JsonDataType { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Request.ContentType.Contains("application/json")) { string inputContent; using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream)) { inputContent = sr.ReadToEnd(); } var result = JsonConvert.DeserializeObject(inputContent, JsonDataType); filterContext.ActionParameters[Param] = result; } } }
Exemple :
JavaScript :
function getplaceholders() { var widgets = []; // ... populate the array $.ajax({ url: '/portal/Designer.mvc/SaveOrUpdate', type: 'POST', dataType: 'json', data: JSON.stringify(widgets), contentType: 'application/json; charset=utf-8' }); }
Action du contrôleur :
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))] public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets) { // ... }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!