L'envoi d'objet JSON à l'API Web
Je suis en train d'essayer de comprendre comment je peux envoyer de l'information à partir d'un formulaire à une API Web d'action. C'est le jQuery/AJAX je suis en train d'utiliser:
var source = {
'ID': 0,
'ProductID': $('#ID').val(),
'PartNumber': $('#part-number').val(),
'VendorID': $('#Vendors').val()
}
$.ajax({
type: "POST",
dataType: "json",
url: "/api/PartSourceAPI/",
data: JSON.stringify({ model: source }),
success: function (data) {
alert('success');
},
error: function (error) {
jsonValue = jQuery.parseJSON(error.responseText);
jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
}
});
Voici mon modèle
public class PartSourceModel
{
public int ID { get; set; }
public int ProductID { get; set; }
public int VendorID { get; set; }
public string PartNumber { get; set; }
}
Voici mon point de vue
<div id="part-sources">
@foreach (SmallHorse.ProductSource source in Model.Sources)
{
@source.ItemNumber <br />
}
</div>
<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />
<input type="submit" id="save-source" name="save-source" value="Add" />
Voici mon contrôleur de l'action
//POST api/partsourceapi
public void Post(PartSourceModel model)
{
//currently no values are being passed into model param
}
Ce qui me manque? maintenant, quand je debug et pas à travers ce quand la requête ajax frappe le contrôleur de l'action il n'y a rien transmis dans le modèle param.
- Avez-vous essayé sans
JSON.stringify
?data: { model: source }
, ou peut-être justedata : source
- jQuery gère la conversion pour vous... - Oui, j'ai fait un essai sans JSON.stringify, mais cela ne fonctionne pas non plus. J'ai essayé toutes les combinaisons possibles, je pense, de l'AJAX, mais je pense que il y a quelque chose qui me manque sur le contrôleur.. je ne sais pas si, c'est une pure supposition.
- Quand tu dis "rien" est passé dans le modèle param, voulez-vous dire par exemple "modèle" est null? Ou sont ses valeurs par défaut / null? Qu'advient-il si vous changez de type de modèle de chaîne pour obtenir le raw de la représentation, ou même supprimer le paramètre d'entrée et la sonde de la Demande.Contenu et de la Demande.Les en-têtes des propriétés directement pour savoir ce que le serveur reçoit?
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
jquery
Contrôleur
Vue
Maintenant, lorsque vous cliquez sur "
Add
' après le remplissage de la zone de texte, lecontroller
va cracher retour ce que vous avez écrit dans lePartNumber
boîte dans une alerte.data: source
fixe de sorte qu'il serait correctement lier le 'modèle' param dans le contrôleur. J'ai pensé que je devais inclure le nom de "modèle:" dans mon ajax dans l'ordre pour que cela fonctionne. Merci beaucoup!contentType: 'application/json'
dans mon appel ajax. Pourquoi n'est-ce pas réponse faut-il?Changement:
À:
Et dans votre contrôleur vous faites cela:
Si l'url que vous utilisez dans jquery est
/api/PartSourceAPI
puis le nom du contrôleur doit êtreapi
et l'action(méthode) doit êtrePartSourceAPI
vos données est quelque chose comme cela "{"modèle": "ID":0,"ProductID":6,"PartNumber":7,"Id":8}}"
web api contrôleur ne peut pas lier à Votre modèle
Je crois que vous avez besoin des guillemets autour de la
model
:{model:source}
est très bien.