asp.net核心中的ajax POST int参数

时间:2019-03-07 23:33:19

标签: ajax asp.net-core asp.net-ajax

我正在将我的MVC项目迁移到Core,并且一直很难解决所有旧的ajax调用。

我可以将模型和字符串参数传递给控制器​​,但是int对我不起作用。

我可以将它们作为字符串参数(如[FromBody]string objId)包装到JSON对象中,但是我必须从Json {'objId' : 1}解析int val。

有没有一种方法可以避免这种情况,而只传递一个int?

下面是我正在尝试的代码。

[HttpPost]
public JsonResult PassIntFromView([FromBody]int objId)
{
    //DO stuff with int here
}

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

objId在控制器中始终为0。

我没有做JSON.stringify(data)也没有尝试过。

我还尝试了所有不同的表单属性变体。

6 个答案:

答案 0 :(得分:3)

尝试将contentType用作'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);
     }
 });

然后删除控制器中的[FromBody]属性

[HttpPost]
public JsonResult PassIntFromView(int objId)
{
    //Do stuff with int here
}

答案 1 :(得分:1)

尝试一下:

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

您的控制器:

[HttpPost]
public JsonResult PassIntFromView(int objId)
{
    //DO stuff with int here
}

答案 2 :(得分:1)

JSON对字符串的偏好不是整数。最好使用JSON.stringify(data)解析到控制器,然后在控制器中将其转换为整数,然后解析返回的字符串:

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

答案 3 :(得分:1)

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

});

答案 4 :(得分:0)

我相信您的问题可能是您正在将一个对象传递给api,但试图将其变成原始对象。我知道已经有一个选择的答案,但是请稍作调整。

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

您创建模型类

public class MyModel {
     public int ObjId {get;set;}
}

您的控制器应该期望其中之一

[HttpPost]
public JsonResult PassIntFromView([FromBody] MyModel data)
{
    //DO stuff with int here
}

答案 5 :(得分:0)

我让它像这样

let numberFour = JSON.stringify(4);

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