web-dev-qa-db-fra.com

ajax POST PARAMETER INT dans ASP.NET CORE

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.

8
domshyra

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
}
5
Xueli Chen

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
}
2
DeadlyChambers

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);
    }
});
1
Mick

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
}
1
MarioMendieta

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);
    }

});
1
Tien Nguyen

Je l'ai travaillé comme ça

let numberFour = JSON.stringify(4);

$.ajax({
    .......
    .......
    data: numberFour,
    type: "POST",
    dataType: 'JSON',
    contentType: "application/json",
    ......
    ........
});

0
BLong