将数组从javascript传递给控制器​​MVC 4

时间:2013-08-07 19:53:21

标签: javascript ajax asp.net-mvc-4 razor

我正在使用剃刀,我很难将数组传递给控制器​​。数组包含我创建的对象,我正在尝试这样做:

$.ajax({
     type: "POST",
     url: "HomePage/HandleOperations",
     data: JSON.stringify(operationCollection),
     success: function (data) { alert("SUCESS");},
     dataType: "json",
     contentType: "application/json"
});

我的控制器是:

 public void HandleOperations(List<string> operationCollection)
 {

 }

我不需要使用ajax,但我不确定它是怎么做的。在控制器中,它显示“operationCollection”包含元素,但它们都是空的。

4 个答案:

答案 0 :(得分:11)

Ajax参数

traditional : true

会做到这一点。

答案 1 :(得分:3)

客户方:

$.ajax({
     type: "POST",
     url: "HomePage/HandleOperations",
     data: {operations: operationCollection},
     success: function (data) { alert("SUCCESS"); }
});

并声明类服务器端如下:

public class Operation
{
  public int Index;
  public string Source;
  public string Target;
  public int AddOrDel;
}

然后你可以采取这个行动:

public void HandleOperations(Operation[] operations)
{
}

答案 2 :(得分:3)

用于ajax调用的传统:true参数:

为了帮助radbyx,使用ajax调用的“traditional:true”属性,如下所示,将告诉ajax使用传统的序列化形式。更多细节:http://api.jquery.com/jQuery.param/  或What is "traditional style of param serialization' in JQuery

$.ajax({
     type: "POST",
     url: "HomePage/HandleOperations",
     data: {operations: operationCollection},
     traditional: true,
     success: function (data) { alert("SUCCESS"); }
});

答案 3 :(得分:-1)

在ajax中添加“traditional:true”参数。

示例:

var parentValueToPush=new Array();
$('[name=SelectedUsers]:checked').each(function () {
            parentValueToPush.push($(this).val());
            temp.push($(this).val());
        });
        $.ajax({
            url: //URL,
            type: 'get',
            traditional: true,
            dataType: 'html',
            cache: false,
            data: { SelectedUsers: parentValueToPush},
            success: function (data) {
                   //Result
            }
        });