Comment accéder à la matrice multidimensionnelle Javascript dans le contrôleur MVC

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: Entrez la description de l'image ici

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.

Essayer avec l'approche modèle

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:

Entrez la description de l'image ici

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/