2012-03-07 26 views
6

estoy consiguiendo resultados un tanto extraños al tratar de pasar un objeto JSON complejo para una acción en MVC 3.Pass Complejo JSON objeto de una acción MVC 3

El Locations están pobladas en el modelo de parámetro de acción, pero el nombre y la ubicación no lo son

Si hago ko.toJS(testViewModel), entonces el nombre y la ubicación están ahí, pero las ubicaciones están en blanco ???

que estoy 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") 
    } 

de enviarlo a través de jQuery Ajax:

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

MVC Acción:

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

Modelos:

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 

Respuesta

15

intente configurar el tipo de contenido a application/json en su petición AJAX:

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

Gracias Darin !! ¡Eso funciono! ¡Te debo otra cerveza muy pronto! – Sam

+0

¿Es posible analizar modelos complejos de esta manera y recibirlos en la acción del controlador como objetos tipados? Porque estoy tratando de hacer lo mismo, pero la colección del objeto, aunque con las instancias, viene con valores de propiedad vacíos. –

+0

@GustavoRubio, sí, es posible usar objetos y colecciones arbitrariamente complejos. Solo las referencias a objetos circulares no son compatibles porque no pueden ser serializadas por JSON. –

Cuestiones relacionadas