2

我正在尝试向我的 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)
4

4 回答 4

6

模型绑定不知道“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/ )

你应该很好。

于 2013-09-06T17:00:15.270 回答
3

processData: falseajax电话不见了。没有它,ajax将尝试将其打包data到 URL 查询字符串中。(见这里:http ://api.jquery.com/jQuery.ajax/ )

如果data{ 'animal': 'elephant', 'count': 5 }并且processDatatrue(默认值),ajax将对带有空 HTTP 请求正文POST的 URL执行。/Weather1/Weather_post?animal=elephant&count=5这就是你想要的原因processData: false

于 2013-09-06T16:50:21.517 回答
0

您可能需要将参数名称与数据一起传递。就像是:

 data: {'MyModuleList': JSON.stringify(myDataArray)},

看看这是否适合你。

于 2013-09-06T17:15:39.917 回答
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"); }
 })
于 2013-09-06T17:07:31.180 回答