使用Ajax将数组从视图传递到控制器,但是在操作时,数组显示为空

时间:2017-12-18 11:58:37

标签: c# ajax asp.net-mvc

我使用Ajax将数组从视图传递给控制器​​,但是,在操作时,数组显示为空。

这是我的代码:

查看

$("#btn").click(function () {
            debugger
             arry = [];
                $.ajax({
                type: "Post",
                url: "/Main/CheckBoxes",
                data: { Values: arr["48","47","46"] },
                success: function () {
                    alert("array: " + arry.join(', '));
                },
                error: function () {
                    alert("error");
                }
            })


        });

动作

 public ActionResult array(string[] Values)
      {
          for (int id = 0; id < Values.Length; id++)
          {
              string newID = Values[id];
          }

        return View();
    }

2 个答案:

答案 0 :(得分:1)

  jQuery.ajaxSettings.traditional = true;

$("#btn").click(function () {
            debugger
             arry = [];
                $.ajax({
                type: "Post",
                url: "/Main/CheckBoxes",
                data: { Values:["48","47","46"]},//just edit this line
                success: function () {
                    alert("array: " + arry.join(', '));
                },
                error: function () {
                    alert("error");
                }
            })


        });

答案 1 :(得分:1)

您的代码在发送数据方面存在一些问题!执行此表达式arr["48","47","46"]时,您的期望是什么?这将给你undefined,这就是你要发送的东西!

有两种方法可以修复您的代码。您可以在请求正文中发送数组。为此,您需要从数组创建一个JSON字符串,并将其作为data属性发送,同时将请求内容类型标头值明确指定为“application / json”。您可以使用JSON.stringify方法获取js数组的JSON字符串。

此外,请确保您正在调用正确的操作方法。在您的问题中,您共享了array操作方法代码,但在客户端脚本中,您尝试调用其他操作方法(`Checkboxes)!

这应该有用。

var arry = ["48", "47", "46"];
var url = "@Url.Action("array", "Main")";  // Update your real url here
// If your script is inside the razor view, you can us Url.Action (c#) method

$.ajax({
    type: "Post",
    url: url ,
    data: JSON.stringify(arry),
    contentType: "application/json",
    success: function(r) {
        alert("Success");
        console.log(r);
    },
    error: function() {
        alert("error");
    }
});

另一种选择是发送带有Values属性的javascript对象(其数组作为其值)作为$.ajax调用的数据属性值。现在,请求内容类型标头将为application/x-www-form-urlencoded;,并且数组将在请求中作为FormData发送。

var arry = ["48", "47", "46"];

$.ajax({
    type: "Post",
    url: "/Main/array",
    data: { Values: arry },
    success: function(r) {
        console.log(r);
    },
    error: function() {
        alert("error");
    }
});