尝试将数组对象传递给我的Web服务控制器,但它始终为null

时间:2017-02-01 19:13:44

标签: c# asp.net-web-api asp.net-ajax

我只是想将一个数组对象从我的javascript传递给控制器​​。虽然达到警报它给复选框值,所以我相信javascript没有错。在控制器中,对象始终为null。我在这里做错了什么?

function amal() {

var selected = [];

$('input[type="checkbox"]:checked').each(function () {

    selected.push($(this).val());
});
alert(selected);

$.ajax({
    url: "http://localhost:63138/api/Emptbles/LoadAmal",
    type: "POST",
    data: selected,

    contentType: "application/json",
    success: function (response) {
        alert("success");
        myFunction();
    },
    error: function () {

    }
});

我的api控制器

[HttpPost]
    public IHttpActionResult LoadAmal(List<selectedSymptoms>list)
    {
        string item1 = "";
        string item2 = "";
        string item3 = "";


        for (int i = 0; i < list.Count; i += 3)
        {
            //grab 3 items at a time and do db insert, 
            // continue until all items are gone..
             item1 = list.ElementAt(i+0).ToString(); ;
            item2 = list.ElementAt(i + 1).ToString(); ;
            item3 = list.ElementAt(i + 2).ToString(); ;
            // use the items
        }

        string query = "EXEC Add_Employee'" + item1 + "','" + item2 + "','" + item3 + "'";

        int result = connectionProvider.CreateSomething(query);


        return Ok(result);
}

我的selectedSymptoms类(我不知道这是否正确,只想将jason对象带给控制器。谢谢)

public class selectedSymptoms
{
    public void PassThings(List<selectedSymptoms> symtoms)
    {
        var t = symtoms;
    }


} 

2 个答案:

答案 0 :(得分:0)

您遇到的情况是您发送的对象与Web API之间的序列化问题。微软gives you code to test this process,我建议你使用它,因为它会教你很多东西。

您在回复中发送的内容可能如下所示:

["someValue1", "someValue2", "etc"]

您的API中的Type需要是可序列化的,并且在您当前的课程中没有可能的方法。如果您只想发送一个字符串列表,那么您根本不应该使用复杂对象,只需使用List<string>即可。如果您确实想要使用复杂对象,则需要使用属性将数据映射到。

如果我上课了

public class Person 
{    
     public string Name {get; set;}
}

我想发布一个javascript对象表示,我的代码看起来像:

var people = [];

$('input[type="checkbox"]:checked').each(function () {
    var Person = new Object();
    Person.Name = $(this).val();
    people.push(Person);
});

$.ajax({
    url: "http://localhost:63138/api/Emptbles/LoadAmal",
    type: "POST",
    data: people,
    contentType: "application/json",
    success: function (response) {
    },
    error: function () {
    }
});

您可以看到我们基本上是如何创建一个JavaScript版本的C#类数组,它可以轻松地在两个对象之间映射Name属性。

API看起来像:

public IHttpActionResult GetStuff(List<Person> peeps) {}

答案 1 :(得分:-1)

试试这个:

data: { 'list' : selected }