AJAX Post ASP.NET MVC 6 méthode d'action du Contrôleur et les paramètres sont nuls
J'ai un problème étrange avec ASP.NET MVC et l'envoi d'une requête AJAX post. J'ai une balise d'ancrage sur la page avec l'id 'lnkGetExpirDates'. Lorsque l'utilisateur clique dessus, je suis en train de simplement envoyer cette codé en dur des données sur mon contrôleur de sorte qu'il peut l'utiliser comme paramètres et retourner un résultat dans la page.
Toutefois, dans le contrôleur de la params sont toujours null/valeurs par défaut. Veuillez voir mon code ci-dessous et laissez-moi savoir si je suis prise d'une stupide erreur ou quelque chose.
Voici mon AJAX post:
$("#lnkGetExpirDates").click(function () {
e.preventDefault();
var data = {
StartDate: "1/19/2016",
EndDate: "4/19/2016",
ProductType: "New",
Count: 1
};
$.ajax({
url: '/Products/GetExpirationDates',
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
dataType: 'html',
success: function (data) {
$('#ExpirationDates').val(data);
}
});
});
Voici mon contrôleur de la méthode d'action:
//POST: Product/GetExpirationDates
[HttpPost]
//[ValidateAntiForgeryToken]
public IActionResult GetExpirationDates(GetExpirationDatesViewModel vm)
{
//TODO: Get expiration dates and return them in the response
return View();
}
Ici est la GetExpirationDatesViewModel:
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string ProductType { get; set; }
public int Count { get; set; }
Veuillez noter que j'ai même essayé sans l'aide d'un modèle à tous et tout simplement l'ajout de paramètres à la Méthode d'Action, telles que la date de début, date de fin, type de produit, et le Comte et la encore tout est null.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous spécifiez le type de contenu de la valeur que l'application/json, ajax demande au serveur d'envoyer votre js objet que la Demande de la Charge utile, dans le corps de la requête (au format json). Donc, dans votre méthode d'action, vous devez utiliser le
[FromBody]
attribut.Vous devez faire lorsque vous voulez envoyer un complexe js objet avec des propriétés qui est encore un autre modèle/type
Mais les données que vous envoyez est une vue à plat du modèle. Si vous n'avez pas vraiment besoin de json stringify la js objet. Aussi, vous pouvez supprimer la propriété type de contenu ainsi que vous n'allez pas envoyer un stringified version d'un complexe js objet.
Cela devrait fonctionner correctement.
Le code ci-dessus va envoyer le js objet que de paires clé-valeur (forme normale) et le modèle de classeur sera en mesure de mapper les données d'un formulaire à votre modèle de vue de l'objet dans le serveur. Jetez un oeil à ce post pour des explications plus détaillées.
Aussi je vous recommande d'utiliser le
Url.Action
méthode d'aide à générer la bonne url relative à la méthode d'action(s).Ci-dessus devrait fonctionner si votre code js est à l'intérieur d'un rasoir de vue. Si votre code est à l'intérieur d'un fichier js externe, Utilisez la solution décrite dans ce post.
Json()
méthode. Voir un exemple ici stackoverflow.com/questions/10608198/...