2012-03-07 2 views
6

Je reçois des résultats étranges tout en essayant de passer un objet JSON complexe à une action dans MVC 3.passe complexe JSON objet à un MVC 3 action

Le Locations sont renseignés sur le modèle des paramètres d'action, mais le nom et l'emplacement ne sont pas.

Si je fais ko.toJS(testViewModel), alors le nom et l'emplacement sont là, mais les emplacements sont vierges ???

J'utilise 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") 
    } 

l'envoyer par jQuery ajax:

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

action MVC:

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

Modèles:

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 

Répondre

15

essayez de régler le type de contenu à application/json dans votre requête AJAX:

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

Merci Darin !! Ça a marché! Je te dois bientôt une autre bière! – Sam

+0

Est-il possible d'analyser des modèles complexes de cette façon et de les recevoir dans l'action du contrôleur en tant qu'objets typés? Parce que j'essaye de faire la même chose mais la collection de l'objet, bien qu'avec les instances, vient avec des valeurs de propriété vides. –

+0

@GustavoRubio, oui, il est possible d'utiliser des objets et des collections arbitrairement complexes. Seules les références d'objets circulaires ne sont pas prises en charge car elles ne peuvent pas être sérialisées au format JSON. –

Questions connexes