Lista de parámetros de ModelBinding en MVC

Estoy tratando de usar jQuery Datatables 1.10 con el procesamiento del lado del servidor y ASP.NET MVC 5. Desafortunadamente, Datatables 1.10 escribe en el servidor mediante la serialización de una jerarquía compleja de objetos en una cadena param ( Content-Type: application/x-www-form-urlencoded ), que rompe el ModelCinder MVC .

¿Hay alguna forma, en MVC, de vincular una compleja jerarquía de objetos pasados ​​como una lista de parámetros serializados? Tal vez un ModelBinder personalizado que alguien ha escrito?

Nota:

Establecer traditional = true en la llamada ajax no funciona, porque eso no admite jerarquías de objetos. Termino con algo como:

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

Si los datos fueron enviados por DataTables como JSON, entonces asumo que todo estaría bien. El problema se deriva del hecho de que los datos se envían como una lista de parámetros.

También tenga en cuenta

Código para el cableado de la mesa:

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

Descargo de responsabilidad: Soy el autor del proyecto DataTables.MVC mencionado en GitHub

El problema con DataTables 1.10 (nueva API) es que su estructura de solicitud no es totalmente compatible con el motor de enlace de ASP.NET MVC.

Puede escribir su propio archivador o manejar manualmente cada parámetro enviado desde DataTables dentro de su QueryString (GET) o Form (POST). Puede anularlo para admitir otros métodos.

La idea general detrás de mi proyecto es aliviarle de manejar los parámetros de solicitud una y otra vez. Solo configure el cuaderno y use el modelo: https://github.com/ALMMa/datatables-mvc

En la primera página del proyecto en GitHub hay un código de ejemplo para configurar la carpeta y la ordenación / clasificación de la columna.

Como se describe en el proyecto, la información de clasificación enviada por DataTables es útil en algunos casos (comando directo de SQL) pero puede que no sea tan buena si está usando listas / enumeraciones estáticas o linq regular (aunque puede usar Dynamic Linq para ayudarlo esta).

Hoy acabo de escribir un nuevo código para ayudarlo a personalizar / extender el cuaderno normal o para crear su carpeta JSON de una manera más amigable y para ayudar a obtener columnas filtradas / ordenadas directamente desde el modelo.

Prueba esto: https://github.com/ALMMa/datatables-mvc

Es una implementación personalizada de ModelBinder para la nueva entrada DataTable 1.10. Acabo de descubrirlo ayer y todavía estoy trabajando en mi implementación. Así que no puedo decir qué tan bien funciona; No he llegado al punto de prueba. Pero se ve bien y planeo usarlo.

Me encontré con el mismo problema hace unos días y la solución es bastante sencilla. Puedes leer aquí más sobre esto.

Solo tiene que pasar una función como callback para la propiedad de datos ajax. La función de callback devuelve los datos como cadena JSON:

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

Los datos ahora se envían como Json y ModelBinder completará sus propiedades de objeto profundamente anidadas. No olvide configurar el tipo de contenido en “application / json; charset = utf-8”