Javascript将输入作为数组发送到C#Web API

时间:2014-12-17 13:13:31

标签: javascript c# forms post

------------------------- EDIT --------------------- -----------

它并非重复,因为我无法按照this问题的要求使用ajax请求。


我在javascript中创建一个表单来调用c#WebApi,它将返回一个xls文件(这就是我创建表单而不是ajax调用的原因)。 webApi必须接收一个整数数组,该数组将对应于一组对象ID。 webApi是以下

[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel([FromBody]int[] ids)
{
...
}

我建造的表格是这样的:

var form = document.createElement("form");
form.setAttribute('method', "post");
setAttribute('action', baseUrl + "api/processos/getExcel");
form.setAttribute('target', "_blank");
var rows = $("#tbl").dataTable().fnGetNodes();
var arr = [];
for (var i = 0; i < rows.length; i++)
{
  ids = $("#tbl").dataTable().fnGetData(i).processosId; 
  var input = document.createElement("input");
  input.setAttribute('type', "text");
  input.setAttribute('name', "ids[]");
  input.setAttribute('value', ids);
  form.appendChild(input);
}
document.body.appendChild(form);
form.submit();

WebApi上的ids为空(但不为空)...在Fiddler上观看时,原始视图显示了这个ids=15&ids=14&ids=13&ids=12&ids=11,这正是我需要的...... 为什么不与WebApi ID联系?如果我在网址中发送了这些确切的值(并将[FromBody]更改为[FromUri]就可以了......

------------------- EDIT --------------------------- ---

这是调用方法时WebApi上数组ids中的内容: ids {int[0]}(在调试时看到)

2 个答案:

答案 0 :(得分:0)

因此,解决方案是在后端创建一个模型:

public class ExcelIds
{
    public int[] ids { get; set; }
}

并将控制器更改为:

[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel([FromBody]ExcelIds model)
{
    //code here
}

答案 1 :(得分:0)

您可以使用FormDataCollection.GetValues(string Key)来获取字符串数组,以后可以转换为int []。

[Route("getExcel")]
[HttpPost]
public HttpResponseMessage getExcel(FormDataCollection data)
{
   string[] ids = data.GetValues("ids");
   ...
}