对C#Controller的HTTP POST请求

时间:2013-09-06 16:47:18

标签: c# javascript ajax

我正在尝试向我的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 个答案:

答案 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 }processDatatrue(默认设置),则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)},

看看这是否适合你。