2012-03-07 14 views
6

sto ottenendo alcuni risultati strani durante il tentativo di passare un oggetto JSON complessa per un'azione in MVC 3.Passo Complesso JSON oggetto a un MVC 3 Azione

Il Locations sono popolate sul modello parametro di azione, ma il nome e la posizione non lo sono.

Se faccio ko.toJS(testViewModel), quindi il nome e la posizione ci sono, ma le posizioni sono vuote ???

sto usando knockout.js:

var testViewModel = { 
     Name: ko.observable("Joe Bob"), 
     Locations: ko.observableArray([ 
      { ID: 1, Name: "Salem, OR" }, 
      { ID: 2, Name: "Big Bear Lake, CA" }, 
      { ID: 3, Name: "Big Bear City, CA" } 
     ]), 
     Position: ko.observable("Manager") 
    } 

inviandola tramite jQuery Ajax:

$.ajax({ 
      url: "/ClaimsAuthority/Home/TestIt", 
      type: "POST", 
      data: ko.toJSON(testViewModel), 
      success: function (data, status, xhr) { 
       //ko.applyBindings(data); 
      } 
     }); 

MVC azione:

<HttpPost()> 
     Public Function TestIt(model As TestModel) As ActionResult 
      Return Json(model) 
     End Function 

Modelli:

Public Class TestModel 
    Public Property ID As Integer 
    Public Property Name As String 
    Public Property Locations As ICollection(Of LocationModel) 
    Public Property Position As String 
End Class 

Public Class LocationModel 
    Public Property ID As Integer 
    Public Property Name As String 
    Public ReadOnly Property DisplayText As String 
     Get 
      Return String.Format("({0}) {1}", ID, Name) 
     End Get 
    End Property 
End Class 

risposta

15

provare a impostare il tipo di contenuto per application/json nella richiesta AJAX:

$.ajax({ 
    url: '/ClaimsAuthority/Home/TestIt', 
    type: 'POST', 
    contentType: 'application/json', 
    data: ko.toJSON(testViewModel), 
    success: function (data, status, xhr) { 
     //ko.applyBindings(data); 
    } 
}); 
+0

Grazie Darin !! Ha funzionato! Ti devo molto bene un'altra birra! – Sam

+0

È possibile analizzare i modelli complessi in questo modo e riceverli nell'azione del controller come oggetti digitati? Perché sto cercando di fare la stessa cosa ma la collezione dell'oggetto, sebbene con le istanze, viene fornita con valori di proprietà vuoti. –

+0

@GustavoRubio, sì, è possibile utilizzare oggetti e collezioni arbitrariamente complessi. Solo i riferimenti agli oggetti circolari non sono supportati perché non possono essere serializzati JSON. –

Problemi correlati