【问题标题】:Trying to pass an array object to my web service controller but it always null尝试将数组对象传递给我的 Web 服务控制器,但它始终为空
【发布时间】:2017-06-18 16:08:26
【问题描述】:

我只想将一个数组对象从我的 javascript 传递给控制器​​。尽管提醒它给出了复选框值,所以我相信 javascript 没有任何问题。在控制器中,对象始终为空。我在这里做错了什么?

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;
    }


} 

【问题讨论】:

  • 需要看看selectedSymptoms 的样子。这些对象需要共享相同的属性,以便序列化程序可以映射请求中的属性。如果是 List&lt;string&gt; 类型(或其他简单类型),这将有所不同
  • 在 cmets 中发布代码不起作用。您需要编辑您的问题
  • @Mark 我添加了 rqquested 类。你能看一下吗?
  • 我的回答有帮助吗?如果没有,我会删除它

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


【解决方案1】:

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

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

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

您的 API 中的 Type 需要可序列化,并且在您当前的类中无法做到这一点。如果您只想发送一个字符串列表,那么您根本不应该使用复杂对象,而只需使用List&lt;string&gt;。如果您确实想使用复杂对象,则需要将数据映射到的属性。

如果我有课

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 () {
    }
});

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

API 看起来像:

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

【讨论】:

    【解决方案2】:

    试试这个:

    data: { 'list' : selected }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多