2010-10-24 10 views
1

J'ai parcouru des douzaines de réponses pour comprendre l'astuce pour publier des données de $ .ajax à un paramètre dans MVC Contrôleur 2 Voici ce que j'ai obtenu:

BTW cela fonctionne si vous utilisez un GET, mais échoue comme un POST. Comment pourrais-je le réparer?

$(document).ready(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/Home/Get", 
     data: {value:'9/14/2010 12:00:00 AM'}, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { 
      alert(result.value); 
     } 
    }); 
}); 

Et ceci est mon MVC 2 Controller:

public class strange 
{ 
    public string value { get; set; } 
} 

public JsonResult Get(strange o) 
{ 
    var b = new strange { value = "return" }; 
    return Json(b, JsonRequestBehavior.AllowGet); 
} 

À POST, "la valeur" O est nulle. Changer POST pour obtenir, o "valeur" est "9/14/2010 12:00:00 AM".

Comment puis-je faire fonctionner le POST avec $ .ajax? Est-ce que quelqu'un a déjà publié un guide pour faire fonctionner JSON avec la validation de données MVC2 lors du retour de JSON du client? Je sais qu'ils avaient cela dans leurs contrats à terme MVC 2 il y a un certain temps.

Répondre

1

Vous devez passer JSON au contrôleur, et il cherche un objet strange, tout ce que vous êtes en train de passer est une chaîne appelée value, au lieu de votre data devrait ressembler à ceci:

{ strange: { value:'9/14/2010 12:00:00 AM'} } 

Remarquez comment strange n'est pas un objet avec la propriété value que le serveur recherche. Mais, il va attendre cela comme une chaîne, donc il suffit d'utiliser JSON.stringify() (utiliser JSON2 si nécessaire pour les autres navigateurs, par exemple < IE8):

data: JSON.stringify({ strange: { value:'9/14/2010 12:00:00 AM'} }), 
+0

Lorsque j'ai changé les données en {strange: {value: '9/14/2010 12:00:00 AM'}}, la valeur null reste en dessous de la valeur. Je regarderai la sortie de stringify pour voir ce qui s'y passe. –

+0

C'est ce qui a été posté: étrange% 5Bvalue% 5D = 9% 2F14% 2F2010 + 12% 3A00% 3A00 + AM mais il n'apparaît pas sur le serveur sous tout ce que je peux voir (la valeur reste nulle) –

+0

@DrZim - On dirait que vous n'utilisez pas 'JSON.stringify()' comme ci-dessus;) –

2

Les données que vous envoyez au contrôleur ASP.NET MVC devrait ne pas être codé en JSON. Donc, vous devez simplement supprimer la ligne

contentType: "application/json; charset=utf-8", 

de la demande $.ajax et votre programme fonctionnera.

+0

@Dr. Zim: avec JavaScriptSerializer sérialiseur = new JavaScriptSerializer(); MyData data = serializer.Deserialize (encodedInput); '. Ensuite, vous pouvez utiliser '$ .ajax' avec' data: {encodedInput: JSON.stringify (myData)} 'et tout fonctionnera bien. Ainsi, vous pouvez implémenter différents scénarios dans MVC2 RTM. – Oleg

+0

+1 pour la suggestion. Très belle alternative. Je vais essayer ça ensuite. –