POST Javascript 数组到 MVC 控制器 .NET 5.0
POST Javascript array to MVC controller .NET 5.0
我正在尝试将一些数据从我的 javascript 数组发送到我的 mvc 控制器。
当我通过 im 以我的方法结尾进行调试时 public void GetJSArray(List<SelectorModel> selectorModels)
但是 selectorModels
是 null
。
这是我的模型。
public class SelectorModel
{
public int ID { get; set; }
public string Cords { get; set; }
public string Name { get; set; }
}
这是我在控制器中的 C# 代码。
[HttpPost]
public void GetJSArray(List<SelectorModel> selectorModels)
{
//Code here
}
这是我的 JavaScript/Ajax
function SaveInfoSpots() {
var savedeSpots = JSON.stringify({ selectorModels: infospots });
$.ajax({
type: "POST",
url: '/Home/GetJSArray',
contentType: "application/json; charset=utf-8",
dataType: 'JSON',//json
data: savedeSpots,
traditional: true
});
}
如果我做一个 console.log(savedeSpots)
我明白了。
{"selectorModels":[{"ID":1,"Name":"Infospot1","Cords":"5000.00, 2293.85, 2278.05"},{"ID":1,"Name":"Infospot2","Cords":"1.94, 584.50, 5000.00"},{"ID":1,"Name":"Infospot3","Cords":"5000.00, -2705.97, -277.02"},{"ID":1,"Name":"Infospot4","Cords":"5000.00, 504.93, -2845.93"}]}
将 [FromBody]
添加到您的控制器列表参数中,例如
public void GetJSArray([FromBody] List<SelectorModel> selectorModels)
尝试移除
traditional: true
和
charset=utf-8
也来自 ajax
调用。然后应该在控制器中看到填充列表。
代码中有两个地方需要修改:
首先,关于model binding,在动作参数上添加[FromBody]属性:
[HttpPost]
public void GetJSArray([FromBody]List<SelectorModel> selectorModels)
{
//Code here
}
其次,你的 API 需要一个数组而不是一个对象,所以当你调用 API 时,你需要 post 这样的参数:
[
{
"ID": 1,
"Name": "Infospot1",
"Cords": "5000.00, 2293.85, 2278.05"
},
{
"ID": 1,
"Name": "Infospot2",
"Cords": "1.94, 584.50, 5000.00"
},
{
"ID": 1,
"Name": "Infospot3",
"Cords": "5000.00, -2705.97, -277.02"
},
{
"ID": 1,
"Name": "Infospot4",
"Cords": "5000.00, 504.93, -2845.93"
}
]
不是 {"selectorModels":...}
格式。
如果你只需要 APIs,创建 webapi 项目比 mvc 项目更好。
我正在尝试将一些数据从我的 javascript 数组发送到我的 mvc 控制器。
当我通过 im 以我的方法结尾进行调试时 public void GetJSArray(List<SelectorModel> selectorModels)
但是 selectorModels
是 null
。
这是我的模型。
public class SelectorModel
{
public int ID { get; set; }
public string Cords { get; set; }
public string Name { get; set; }
}
这是我在控制器中的 C# 代码。
[HttpPost]
public void GetJSArray(List<SelectorModel> selectorModels)
{
//Code here
}
这是我的 JavaScript/Ajax
function SaveInfoSpots() {
var savedeSpots = JSON.stringify({ selectorModels: infospots });
$.ajax({
type: "POST",
url: '/Home/GetJSArray',
contentType: "application/json; charset=utf-8",
dataType: 'JSON',//json
data: savedeSpots,
traditional: true
});
}
如果我做一个 console.log(savedeSpots)
我明白了。
{"selectorModels":[{"ID":1,"Name":"Infospot1","Cords":"5000.00, 2293.85, 2278.05"},{"ID":1,"Name":"Infospot2","Cords":"1.94, 584.50, 5000.00"},{"ID":1,"Name":"Infospot3","Cords":"5000.00, -2705.97, -277.02"},{"ID":1,"Name":"Infospot4","Cords":"5000.00, 504.93, -2845.93"}]}
将 [FromBody]
添加到您的控制器列表参数中,例如
public void GetJSArray([FromBody] List<SelectorModel> selectorModels)
尝试移除
traditional: true
和
charset=utf-8
也来自 ajax
调用。然后应该在控制器中看到填充列表。
代码中有两个地方需要修改:
首先,关于model binding,在动作参数上添加[FromBody]属性:
[HttpPost]
public void GetJSArray([FromBody]List<SelectorModel> selectorModels)
{
//Code here
}
其次,你的 API 需要一个数组而不是一个对象,所以当你调用 API 时,你需要 post 这样的参数:
[
{
"ID": 1,
"Name": "Infospot1",
"Cords": "5000.00, 2293.85, 2278.05"
},
{
"ID": 1,
"Name": "Infospot2",
"Cords": "1.94, 584.50, 5000.00"
},
{
"ID": 1,
"Name": "Infospot3",
"Cords": "5000.00, -2705.97, -277.02"
},
{
"ID": 1,
"Name": "Infospot4",
"Cords": "5000.00, 504.93, -2845.93"
}
]
不是 {"selectorModels":...}
格式。
如果你只需要 APIs,创建 webapi 项目比 mvc 项目更好。