2012-07-18 1 views
1

J'ai un problème avec l'envoi de json de knockout à l'action du contrôleur mvc2. Voici ce que j'ai à mon avis:Knockout et MVC2: envoi du modèle au contrôleur

var ViewModel = { 
      FirstName: ko.observable("FirstName"), 
      LastName: ko.observable("LastName"), 
      Save: function() { 
       ko.utils.postJson(location.href, this); 
      } 
} 
ko.applyBindings(ViewModel); 

J'ai une action dans le contrôleur:

public virtual ActionResult SomeAction(MyModel model) { 
     //do smth 
     return View(registrationModel); 
} 
public class MyModel { 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

Le problème est que je reçois des valeurs de chaîne entre guillemets, comme « \ » FirstName \ » ", et je sais qu'il existe un moyen d'éviter cela (travailler avec JSON.stringify dans MVC3). J'ai essayé les éléments suivants:

ko.utils.postJson(location.href, JSON.stringify({model: this}); 

également

var json = JSON.stringify({ 
FirstName: this.FirstName(), 
LastName: this.LastName() 
}); 
ko.utils.postJson(location.href, JSON.stringify({model: json}); 

ou

ko.utils.postJson(location.href, json); 

Dans toutes ces 3 options j'obtiens modèle = null, ou toutes les valeurs NULL dans le contrôleur.

Peut-être que quelqu'un l'a déjà fait?

Répondre

1

J'ai découvert que pour que le mappage d'objet MVC fonctionne, vous devez définir le type de contenu du POST sur "application/json; charset = utf-8". Je ne l'ai jamais fait cela à l'aide ko.utils.postJson() avant, mais voici un exemple de travail en utilisant jQuery:

$.ajax({ 
     url: url, 
     type: "POST", 
     data: ko.toJSON(ViewModel), 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function (response) { 
     }, 
     error: function (response, errorText) { 
     } 
    }); 

Remarque J'utilise ko.toJSON pour sérialiser le modèle comme JSON.

Questions connexes