我正在将我的MVC项目迁移到核心,并且我很难修复所有旧的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)
的情况下尝试了此操作。
我还尝试了所有不同的属性变体。
尝试将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
}
我相信您的问题可能是您将对象传递给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
}
json偏爱字符串而不是整数。您最好使用JSON.Stringify(数据)将其解析为控制器,将其转换为控制器中的整数,然后解析返回的字符串:
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);
}
});
尝试以下:
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
}
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);
}
});
所选答案对我不起作用,有效的是直接在JS上串制整数。因此,仅将data: JSON.stringify(data),
更改为代码中的data: JSON.stringify(1),
。
我像这样工作
let numberFour = JSON.stringify(4);
$.ajax({
.......
.......
data: numberFour,
type: "POST",
dataType: 'JSON',
contentType: "application/json",
......
........
});