Je dois passer une série de filtres comme celui-ci:
Code de script:
return { CustomFilter: options.filter.filters };
+++++++++++++++++++++++++++++++++++++++++++++++++++
De Firebug:
CustomFilter[0][field] ItemName CustomFilter[0][operator] startswith CustomFilter[0][value] testing Value CustomFilter[1][field] BrandName CustomFilter[1][operator] startswith CustomFilter[1][value] testing Value 1
Les valeurs publiées sont:
Mais je ne peux pas les recevoir sur le côté du contrôleur.
J'ai essayé comme ceci:
public ActionResult ReadOperation( string[][] CustomFilter)
Aussi comme ceci:
public ActionResult ReadOperation( Filter[] CustomFilter) public class Filter { public string field { get; set; } public string @operator { get; set; } public string value { get; set; } }
Mais n'a pas fonctionné. Veuillez suggérer.
Je vous remercie.
Solution trouvée avec la déséralogisation de Json
Le code du script a été changé en:
return { CustomFilter: JSON.stringify(CustomFilter) };
Code du contrôleur modifié à:
using Newtonsoft.Json; public ActionResult ReadOperation(MyViewModel model) { var filters = JsonConvert.DeserializeObject(model.CustomFilter, typeof(CustomFilter[])); } public class MyViewModel { public string Filter { get; set; } public string group { get; set; } public int page { get; set; } public int pageSize { get; set; } public int sort { get; set; } } public class CustomFilter { public string field { get; set; } public string @operator { get; set; } public string value { get; set; } }
Affichage des résultats dans le contrôleur:
Si vous utilisez ASP.NET MVC 4 et que vous ne pouvez pas modifier les noms de paramètres, vous pouvez définir un modèle personnalisé de cette façon:
public class MyViewModel { public Dictionary<string,string>[] CustomerFilter { get; set; } public string filter { get; set; } public string group { get; set; } public int page { get; set; } public int pageSize { get; set; } public int sort { get; set; } }
Ensuite, au contrôleur:
public ActionResult ReadOperation(MyViewModel model){ ... }
Il semble que la notation utilisée dans les paramètres générés par votre grille soit pour les dictionnaires . Je n'ai pas essayé une collection de dictionnaires, cependant.
Il ressemble à une erreur avec la structure du modèle.
public class MyViewModel { public Filter[] CustomFilter { get; set; } public string Filter { get; set; } public string Group { get; set; } public int Page { get; set; } public int PageSize { get; set; } public int Sort { get; set; } }
Essayez d'utiliser ce type pour la liaison du modèle.
public ActionResult ReadOperation(MyViewModel model)
Dans la publication, essayez d'envoyer les données comme ceci:
CustomFilter[0].Field ItemName CustomFilter[0].Operator startswith CustomFilter[0].Value testing Value CustomFilter[1].Field BrandName CustomFilter[1].Operator startswith CustomFilter[1].Value testing Value 1
Et au contrôleur:
public ActionResult ReadOperation(Filter[] CustomFilter)
Avoir une classe de Filter
définie comme suit:
public class Filter { public string Field { set; get; } public string Operator { set; get; } public string Value { set; get; } }
(Faites attention aux lettres majuscules).
Ou si vous souhaitez utiliser l'approche du modèle, comme suggère Ufuk, et ayant la même classe de Filter
:
Maquette:
public class MyViewModel { public Filter[] CustomerFilter { get; set; } public string Filter { get; set; } public string Group { get; set; } public int Page { get; set; } public int PageSize { get; set; } public int Sort { get; set; } }
Paramètres dans POST:
CustomFilter[0].Field ItemName CustomFilter[0].Operator startswith CustomFilter[0].Value testing Value CustomFilter[1].Field BrandName CustomFilter[1].Operator startswith CustomFilter[1].Value testing Value 1 Filter ItemName~startswith~'12'~and~BrandName~startswith~'123' Group Page 1 PageSize 15 Sort
Manette
public ActionResult ReadOperation(MyViewModel model)
Voir ce lien: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/