我正在将我的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)
也没有尝试过。
我还尝试了所有不同的表单属性变体。
答案 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",
......
........
});