Liste de parameters ModelBinding dans MVC

J’essaie d’utiliser jQuery Datatables 1.10 avec le traitement côté serveur et ASP.NET MVC 5. Malheureusement, Datatables 1.10 écrit sur le serveur en sérialisant une hiérarchie complexe d’objects dans une chaîne de parameters ( Content-Type: application/x-www-form-urlencoded ), qui rompt le MVC ModelBinder .

Existe-t-il un moyen, dans MVC, de lier une hiérarchie complexe d’objects en tant que liste de parameters sérialisée? Peut-être un CustomBinder personnalisé que quelqu’un a écrit?

Remarque:

La définition de traditional = true dans l’appel ajax ne fonctionne pas, car cela ne prend pas en charge les hiérarchies d’objects. Je me retrouve avec quelque chose comme:

 draw=1& columns=[object Object]& columns=[object Object]& order=[object Object]& start=0& length=10& search=[object Object] 

Si les données ont été envoyées par DataTables en tant que JSON, je suppose que tout irait bien. Le problème provient du fait que les données sont envoyées sous forme de liste de parameters.

Notez également

Code pour le câblage de la table:

 $("#serverTable").DataTable({ serverSide: true, ajax: { url: '/Home/GetTableData', type: 'POST' } }); 

Disclaimer: Je suis l’auteur du projet DataTables.MVC mentionné sur GitHub

Le problème avec DataTables 1.10 (nouvelle API) est que sa structure de requête n’est pas entièrement compatible avec le moteur de liaison ASP.NET MVC.

Vous pouvez écrire votre propre classeur ou gérer manuellement chaque paramètre envoyé à partir de DataTables dans votre QuerySsortingng (GET) ou Form (POST). Vous pouvez le remplacer pour prendre en charge d’autres méthodes.

Toute l’idée derrière mon projet est de vous soulager de la gestion répétée des parameters de demande. Il suffit de définir le classeur et d’utiliser le modèle: https://github.com/ALMMa/datatables-mvc

Sur la toute première page du projet sur GitHub, vous trouverez un exemple de code pour le paramétrage du classeur et le traitement de l’ordre / du sorting des colonnes.

Comme décrit dans le projet, les informations de sorting envoyées par DataTables sont utiles dans certains cas (commande directe SQL), mais peuvent ne pas être très utiles si vous utilisez des listes / énumérations statiques ou linq standard (bien que vous puissiez utiliser Dynamic Linq pour vous aider) ce).

Aujourd’hui, je viens de créer un nouveau code pour vous aider à personnaliser / étendre le classeur standard ou pour créer votre classeur JSON de manière plus conviviale et pour obtenir des colonnes filtrées / sortingées directement à partir du modèle.

Essayez ceci: https://github.com/ALMMa/datatables-mvc

Il s’agit d’une implémentation ModelBinder personnalisée pour la nouvelle entrée DataTable 1.10. Je viens de le découvrir hier et je travaille toujours sur mon implémentation. Je ne peux donc pas dire si cela fonctionne bien. Je n’ai pas atteint le sharepoint test. Mais ça a l’air bien et j’ai l’intention de l’utiliser.

J’ai rencontré le même problème il y a quelques jours et la solution est assez simple. Vous pouvez en lire plus ici .

Il vous suffit de transmettre une fonction en tant que rappel pour la propriété de données ajax. La fonction de rappel renvoie les données sous forme de chaîne JSON:

 var opts = { 'ajax' : { 'url': 'serverSideTableProviderPage', 'type': 'POST', 'contentType': 'application/json; charset=utf-8', 'data':function(data) { return data = JSON.ssortingngify(data); } }, 'pagingType': 'simple', [more options ...] } $('table').dataTable(opts); 

Les données sont maintenant envoyées en tant que Json et ModelBinder remplira vos propriétés d’object nestedes profondes. N’oubliez pas de définir contentType sur “application / json; charset = utf-8”