2013-05-04 19 views
9

Sto creando un'applicazione utilizzando Durandal, con WebAPI come server. Ho una griglia KendoUI che visualizza correttamente i dati dal server e funziona correttamente finché non vengono chiamati i metodi POST o PUT. Ecco il mio metodo GET: enter image description hereModello WebAPI Legatura da JSON

e si può vedere che i dati si lega all'interfaccia utente (utilizzato la data-bind extensibility in Durandal cambiare al kendo attacchi): enter image description here

Poi ho modificare i dati nella griglia e passa i cambiamenti all'interno della richiesta al server, come si può vedere in questo risultato Fiddler: enter image description here

Sul lato server non riesco a ottenere i dati che viene passato dal client di legarsi a qualsiasi cosa ho posto come parametro per il metodo sul POST o PUT. enter image description here

Mi rendo conto che questo è un paio di diverse tecnologie per risolvere i problemi (ad esempio Durandal, KnockoutJs, Kendo DataBinding, e WebAPI), ma penso che i fondamentali stanno lavorando, i dati vengono recuperati e legato all'interfaccia utente ed è inviato indietro quando viene modificato, ma l'endpoint WebAPI non può collegarsi ai dati.

Come è possibile ottenere l'array "modelli" passato per eseguire il binding tramite la struttura ModelBinding in WebAPI?

Update-Ecco il JSFiddle utile che mi ha dato la corretta Content-Type per aggiungere: http://jsfiddle.net/Xhrrj/1/

new kendo.data.DataSource({ transport: { read: { type: "POST", url: "../cccs/service.svc/SupplierSearch", contentType: "application/json; charset=utf-8", dataType: 'json'...

questo viene da forum Telerik here

+0

In base alla richiesta del violinista di esempio, si stanno rinviando i dati ma non nel formato corretto in modo che Web.API non possa consumarli. Quindi il problema riguarda il modo in cui serializzi i dati. Quindi, per favore pubblica il codice del tuo metodo di salvataggio delle modifiche o dove crei la richiesta 'put'. – nemesv

+2

Sembra che stia mescolando form-urlencoded con il formato json - sta inviando 'models =' e quindi seguono gli oggetti JSON urlencoded. –

+0

@nemesv, sto usando le funzioni javascript di KendoUI, ecco uno snippet che ritengo possa essere utile: parameterMap: function (options, operation) { if (operation! == "read" && options.models) { return { modelli: kendo.stringify (options.models)}; }} - link http://docs.kendoui.com/getting-started/web/grid/editing - anche la lettura di questo, potrebbe essere un modo per cambiare il modello di JSON, ma non è sicuro - http: // docs .kendoui.com/getting-started/quadro/origine dati/panoramica –

risposta

6

Sembra che stia mescolando form-urlencoded con il formato json - se si guarda la stringa decodificata sta inviando models= e quindi seguono gli oggetti JSON urlencoded.

+1

le intestazioni http stavano formattando la stringa in questo modo: Content-Type: application/x-www-form-urlencoded; charset = UTF-8. Inserendo quanto segue nel mio oggetto javascript per PUT e POST ho ottenuto i dati corretti attraverso - contentType: "application/json; charset = utf-8" –

0

Dalla mia esperienza credo che la dichiarazione del punto finale PUT deve essere simile a questa:

[HttpPut] 
public void Put([FromBody]IEnumerable<Product> models) { } 

Quindi è necessario l'attributo FromBody perché l'array del prodotto si trova nel corpo (credo?) E non nell'URL della richiesta.

+0

Hey Alex, grazie per aver risposto, ma la tua risposta non ha modificato i valori di binding, in realtà dovevo specificare esplicitamente l'intestazione Content-Type per ottenere il binding dei dati JSON nei metodi API. –

Problemi correlati