Dans MVC4, comment passez-vous un objet javascript à un contrôleur C # dans AJAX? Finalement j'ai essayé mais ça n'a pas marché.
côté client Javascript:
var myData = {Propr1: '', Propr2: ''};
$.ajax({
type: 'POST',
data: JSON.stringify(myData),
url: '/Home/SubmitMyData',
contentType: 'application/json',
dataType: 'json',
success: alert('Youhou'),
error: alert('not good')
});
Méthode côté serveur C #:
public ActionResult SubmitMyData(MyParamModel myParam)
{
// Do my stuff here with my parameter
return View();
}
public class MyParamModel
{
string Prop1 { get; set; }
string Prop2 { get; set; }
}
Mon paramètre est toujours nul. J'ai essayé de changer le contentType mais cela ne fonctionne toujours pas. Où sont mes erreurs? J'ai trouvé quelques messages mais je n'ai pas trouvé ce que j'ai fait de mal.
Merci beaucoup.
Propr1
et Propr2
pour l'objet javascript, mais dans le modèle C #, vous aviez Prop1
et Prop2
(il manque le "r").stringify
les données avant de les envoyer, et ne définissez pas dataType
sur json
. MVC peut très bien analyser une collection de paramètres de publication sans la sérialisation json dans votre code.contentType
, ce n'est pas nécessaire. WebAPI devrait détecter automatiquement cela. Vous pouvez le laisser, mais c'est superflu.côté client Javascript:
var myData = {Prop1: '', Prop2: ''}; // #1
$.ajax({
type: 'POST',
data: myData, // #2
url: '/Home/SubmitMyData',
//contentType: 'application/json', #3
//dataType: 'json', #2
success: alert('Youhou'),
error: alert('not good')
});
Méthode côté serveur C #:
public ActionResult SubmitMyData(MyParamModel myParam)
{
// Do my stuff here with my parameter
return View();
}
public class MyParamModel // #4
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
La valeur que vous passez pour la propriété data
doit être un objet, pas une chaîne:
data: myData,
les noms de propriété doivent correspondre:
var myData = { Prop1: '', Prop2: ''};
vous devez utiliser le [FromBody]
attribut sur la valeur de votre paramètre:
public ActionResult SubmitMyData([FromBody] MyParamModel myParam)
et les propriétés de votre type de modèle doivent être public
:
public class MyParamModel
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}