Je migre mon projet MVC au cœur et j'ai eu du mal à réparer tous les anciens appels Ajax.
Je peux transmettre un modèle et des paramètres de chaîne dans le contrôleur, toutefois, les INT ne fonctionnent pas pour moi.
Je peux les envelopper dans un objet JSON sous forme de paramètre de chaîne tel que [FromBody]string objId
Dans le contrôleur, mais je dois ensuite analyser le Val de l'int Val de la JSON {'objId' : 1}
.
Y a-t-il une façon d'éviter cela et de passer un int?
vous trouverez ci-dessous le code que j'essaie.
[HttpPost]
public JsonResult PassIntFromView([FromBody]int objId)
{
//DO stuff with int here
}
voici le JS.
var data = { "objId": 1};
$.ajax({
url: '@Url.Action("PassIntFromView", "ControllerName")',
data: JSON.stringify(data),
type: "POST",
dataType: 'JSON',
contentType: "application/json",
success: function(data) {
//do stuff with json result
},
error: function(passParams) {
console.log("Error is " + passParams);
}
});
Le objId
est toujours 0 dans le contrôleur.
J'ai essayé cela sans faire JSON.stringify(data)
aussi sans résultat.
J'ai également essayé toutes les variations d'attribut de formulaire différentes.
Essayez d'utiliser le contenutype comme 'application/x-www-form-urlencoded'
:
var data = { objId: 1 };
$.ajax({
url: '@Url.Action("PassIntFromView", "ControllerName")',
type: "post",
contentType: 'application/x-www-form-urlencoded',
data: data,
success: function (result) {
console.log(result);
}
});
Puis retirez le [FromBody]
attribut dans le contrôleur
[HttpPost]
public JsonResult PassIntFromView(int objId)
{
//Do stuff with int here
}
Je crois que votre problème pourrait être que vous transmettez un objet à l'API, mais que vous essayez de le transformer en primitif. Je sais qu'il y a déjà une réponse choisie, mais donnez-lui un tourbillon.
var data = { };
data["objId"] = 1; //I just wanted to show you how you can add values to a json object
$.ajax({
url: '@Url.Action("PassIntFromView", "ControllerName")',
data: JSON.stringify(data),
type: "POST",
dataType: 'JSON',
contentType: "application/json",
success: function(data) {
//do stuff with json result
},
error: function(passParams) {
console.log("Error is " + passParams);
}
});
Vous créez une classe modèle
public class MyModel {
public int ObjId {get;set;}
}
Votre contrôleur devrait s'attendre à ce que l'un de ces
[HttpPost]
public JsonResult PassIntFromView([FromBody] MyModel data)
{
//DO stuff with int here
}
JSON a une préférence pour les chaînes non des entiers. Vous ferez mieux d'utiliser json.stringify (données) pour analyser votre contrôleur, convertir cela en un entier dans le contrôleur, puis analyser la chaîne renvoyée comme suit:
var data = { objId: 1};
$.ajax({
url: '@Url.Action("PassIntFromView", "ControllerName")',//asp.net - url: 'api/controllerName/controllerFunction'
data: JSON.stringify(data),
type: "POST",
dataType: 'JSON',
contentType: "application/json",
success: function(data) {
var result = JSON.parse(data);
//do stuff with json result
},
error: function(passParams) {
console.log("Error is " + passParams);
}
});
Essaye ça:
var data = { "objId": 1};
$.ajax({
url: '@Url.Action("PassIntFromView", "ControllerName")',
data: data,
type: "POST",
dataType: 'JSON',
contentType: "application/json",
success: function(data) {
//do stuff with json result
},
error: function(passParams) {
console.log("Error is " + passParams);
}
});
Votre contrôleur:
[HttpPost]
public JsonResult PassIntFromView(int objId)
{
//DO stuff with int here
}
Js
var data = { "objId": 1};
$.ajax({
url: "ControllerName/PassIntFromView",
data: data,
type: "POST",
dataType: 'JSON',
success: function(data.result!=null) {
console.log(data.result);
},
error: function(passParams) {
console.log("Error is " + passParams);
}
});
Je l'ai travaillé comme ça
let numberFour = JSON.stringify(4);
$.ajax({
.......
.......
data: numberFour,
type: "POST",
dataType: 'JSON',
contentType: "application/json",
......
........
});