无法弄清楚为什么我将一组JavaScript对象传递给控制器​​方法,控制器方法不能获取对象

时间:2017-03-11 01:01:47

标签: javascript jquery asp.net-mvc

我一直在寻找一段时间并且多次遇到过这个问题而且我在解决方案中做同样的事情但又困惑为什么它不起作用。 我确定这个问题会被标记为重复,但确实如此,但我遗漏了一些东西。

这是JavaScript对象数组

var gridData = {
    tempData: [
        { UserName: "Tom", LastName: "Solomon" },
        { UserName: "Harry", LastName: "Solomon" },
        { UserName: "Sally", LastName: "Solomon" },
        { UserName: "Dick", LastName: "Solomon" },
    ]
};

这是我的Ajax

function TossIt() {
    var sendThis = gridData.tempData;
    console.log(sendThis);
    $.ajax({
        type: "POST",
        url: "/Junk/JAT?s=" + sendThis,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(sendThis),
        success: function (data, textStatus, jqXHR) { },
        complete: function (e) {
        }
    })
}

以下是我将其传递给

的方法
[HttpPost]
public List<Stuff> JAT(Stuff s)
{
    List<Stuff> result = new List<Stuff>();


    return result;
}

这是班级

public class Stuff
    {
        public string UserName { get; set; }
        public string LastName { get; set; }
    }

我在JAT方法上有一个断点,s总是为空

修改 我需要操作对象中的一些属性然后返回列表

3 个答案:

答案 0 :(得分:1)

您的代码存在许多问题

  1. 您无法在查询字符串中发送javascript对象数组 参数和您的网址只需url: '/Junk/JAT',或 最好是url: @Url.Action("JAT", "Junk");,以确保 url是正确生成的(作为旁注,从一个绑定模型 查询字符串,它需要 /Junk/JAT?[0].UserName=Tom&[0].LastName=Solomon&[1].UserName=Harry&.....
  2. 您发送代表Stuff的对象数组 POST方法中的参数也必须实现 IEnumerable<Stuff>(不是一个Stuff
  3. 您指定该方法返回json(您使用dataType: "json",)因此该方法必须返回JsonResult
  4. 你的代码应该是

    脚本

    $.ajax({
        type: "POST",
        url: '@Url.Action("JAT", "Junk")',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ s: sendThis }),
        success: function (data, textStatus, jqXHR) {
            .... // do something with the data you return
        },
        complete: function (e) {
        }
    })
    

    控制器

    [HttpPost]
    public JsonResult JAT(List<Stuff> s) // or ActionResult
    {
        .... // manipulate the collection as required
        return Json(s);
    }
    

答案 1 :(得分:0)

[HttpPost]
public List<Stuff> JAT([FromBody]List<Stuff> s)
{
    List<Stuff> result = new List<Stuff>();


    return result;
}

答案 2 :(得分:0)

上面使用POST的答案是要走的路。但是,如果您想要GETqueryStrings,您也可以。

琐碎的例子:

  • 客户端(见$.param()

    var gridData = {
        tempData: [
            { UserName: "Tom", LastName: "Solomon" },
            { UserName: "Harry", LastName: "Solomon" },
            { UserName: "Sally", LastName: "Solomon" },
            { UserName: "Dick", LastName: "Solomon" },
        ]
    };
    
    function TossIt() {
        var sendThis = gridData.tempData;
        console.log(sendThis);
        $.ajax({
            type: "GET",
            url: "/JAT?" + $.param(gridData), //using $.param() here for query string            
            success: function(data, textStatus, jqXHR) {},
            complete: function(e) {
            }
        });
    }
    
  • Controller

    • 按照上述关于List<Stuff>
    • 的评论/回答
    • HttpGet属性
    • 将参数名称调整为tempData(re:$.param()

      [System.Web.Mvc.HttpGet]
      public List<Stuff> JAT(List<Stuff> tempData)
      {
         ......
      }
      

... H个