我正在尝试向我的C#控制器发出HTTP POST请求,但是我需要向数据发送一个数组,所以我尝试使用JSON.stringify但是当我开始调试时,我的控制器中的输入参数是NULL? 我正在从外部API接收天气预报列表,所以我需要为列表中的每个项目创建新变量,它有一些字段,如:最大和最小温度,描述,湿度,压力等,然后当然填写这些带有数据的字段并将该变量添加到我的数组中。然后我需要将此数组传递给我的控制器,以便将其存储在我的数据库中... 我应该在控制器中放入什么类型,以便它不会为NULL?我是全新的,所以请帮助,任何帮助真的更受欢迎!
以下是我刚刚尝试的代码:
var myData = { id:100, description:"some text"};
var myDataArray= new Array();
myDataArray.push(myData);
$.ajax({
dataType: "json",
type: "POST",
url: "/Weather1/Weather_post",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(myDataArray),
success: function (data) {
console.log(("OK"));
},
error: function (error)
{ console.log("NOT OK"); }
})
控制器:
[HttpPost]
public JsonResult Weather_post(String MyModuleList)
答案 0 :(得分:5)
模型绑定不知道“MyModuleList”是什么。您可以在此处使用强类型模型,MVC会将JSON绑定到它。
考虑JSON:
var data = {
moduleList: [
{ id:100, description:"some text"}
];
};
和模特:
public class ModuleListModel
{
public List<ModuleModel> ModuleList { get; set; }
}
public class ModuleModel
{
public int Id { get; set; }
public string Description { get; set; }
}
和行动:
[HttpPost]
public JsonResult Weather_post(ModuleListModel model)
{
...
}
将其与@Timothy Shields的回答结合起来:
你的ajax调用中缺少processData:false。没有它, ajax将尝试将数据打包到URL查询字符串中。 (看到 这里:http://api.jquery.com/jQuery.ajax/)
你应该好。
答案 1 :(得分:3)
您processData: false
来电中遗漏了ajax
。没有它,ajax
将尝试将data
打包到URL查询字符串中。 (见这里:http://api.jquery.com/jQuery.ajax/)
如果data
为{ 'animal': 'elephant', 'count': 5 }
且processData
为true
(默认设置),则ajax
会对POST
进行网址{{} 1}}带有一个空的HTTP请求体。这就是您想要/Weather1/Weather_post?animal=elephant&count=5
。
答案 2 :(得分:0)
尝试如下:
var myData = { id:100, description:"some text"};
var myDataArray= new Array();
myDataArray.push(myData);
var param = JSON.stringify(myDataArray);
$.ajax({
dataType: "json",
type: "POST",
url: "/Weather1/Weather_post",
contentType: "application/json; charset=utf-8",
data: {'MyModuleList': param },
success: function (data) {
console.log(("OK"));
},
error: function (error)
{ console.log("NOT OK"); }
})
答案 3 :(得分:0)
您可能需要将参数名称与数据一起传递。类似的东西:
data: {'MyModuleList': JSON.stringify(myDataArray)},
看看这是否适合你。