Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Jquery中将对象数组传递给MVC控制器?_C#_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

C# 如何在Jquery中将对象数组传递给MVC控制器?

C# 如何在Jquery中将对象数组传递给MVC控制器?,c#,asp.net,ajax,asp.net-mvc,C#,Asp.net,Ajax,Asp.net Mvc,我试图将一组对象从js ajax发布到asp.net mvc控制器。但控制器参数始终为空。是否存在类型不匹配或其他问题 jsajax var obj = {}; var arr = []; obj = { id: clicked.attr("name"), name: clicked.text().trim() } if (clicked.hasClass("active")) {

我试图将一组对象从js ajax发布到asp.net mvc控制器。但控制器参数始终为空。是否存在类型不匹配或其他问题

jsajax

    var obj = {};
    var arr = [];

    obj = {
           id: clicked.attr("name"),
           name: clicked.text().trim()
          }

    if (clicked.hasClass("active")) {
        clicked.removeClass("active");
        clickedCount--;

        arr.pop(obj);
    }
    else {
        clicked.addClass("active");
        clickedCount++;

        arr.push(obj);
    }

    $.ajax({
            url: "/Players/Shuffle",
            type: "POST",
            data: JSON.stringify({ list: arr }),
            contentType: "json",
            success: function (data) {}
           });
$.ajax({
            url: "/Players/Shuffle",
            type: "POST",
            data: {list: JSON.stringify(arr)},
            datatype: "json",
            success: function (data) {}
           });
控制器

    [HttpPost]
    public ActionResult Shuffle(List<player> list)
    {
        return RedirectToAction("Shuffled", new { l = list });
    }
[HttpPost]
public ActionResult Shuffle(string list)
{
    var js = new JavaScriptSerializer();
    var deserializedList = (object[])js.DeserializeObject(list);
    return RedirectToAction("Shuffled", new { l = deserializedList });
}
cshtml

@model List<Player>

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
 }

 @{ 
    ViewBag.Title = "Shuffled";
   }

 <h1 id="test">
    list: @ViewData["PlayerList"]
 </h1>
@型号列表
@{
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@{ 
ViewBag.Title=“洗牌”;
}
列表:@ViewData[“PlayerList”]

像这样更改您的代码,我认为它会起作用:

jsajax

    var obj = {};
    var arr = [];

    obj = {
           id: clicked.attr("name"),
           name: clicked.text().trim()
          }

    if (clicked.hasClass("active")) {
        clicked.removeClass("active");
        clickedCount--;

        arr.pop(obj);
    }
    else {
        clicked.addClass("active");
        clickedCount++;

        arr.push(obj);
    }

    $.ajax({
            url: "/Players/Shuffle",
            type: "POST",
            data: JSON.stringify({ list: arr }),
            contentType: "json",
            success: function (data) {}
           });
$.ajax({
            url: "/Players/Shuffle",
            type: "POST",
            data: {list: JSON.stringify(arr)},
            datatype: "json",
            success: function (data) {}
           });
控制器

    [HttpPost]
    public ActionResult Shuffle(List<player> list)
    {
        return RedirectToAction("Shuffled", new { l = list });
    }
[HttpPost]
public ActionResult Shuffle(string list)
{
    var js = new JavaScriptSerializer();
    var deserializedList = (object[])js.DeserializeObject(list);
    return RedirectToAction("Shuffled", new { l = deserializedList });
}

data:JSON.stringify({list:arr}),
并添加
contentType:'JSON'
,然后将参数更改为
list
,其中
T
是一个包含属性
id
name
(但是既然数组只包含一个对象,为什么要发布一个数组呢?)我必须用JSON传递它吗?我不能按原样发送它吗?除非您使用索引属性名-
数据:{[0]。id:x[0]。name:y[1]。id:xx[1]。name:yy…}
在调试中,我看到列表再次为空,但当我运行它时,我在firebug中看到正确的post值。(这是我不理解的情况)。无论如何,我现在要更新这个问题。如果你在我的初始评论中使用代码,它将不会是
null