将jquery数组传递给asp.net mvc控制器

时间:2012-09-07 04:06:23

标签: jquery ajax asp.net-mvc

如何将'myArray'数组传递给mvc控制器?我已经尝试了一切,但我似乎无法得到任何工作

控制器

[HttpPost]
public ActionResult MyAction(MyModel model, List<string> myArray) {
     //code...
}

查看

$('#dialog').dialog({
        //...
        buttons: {
            "Cancel": function () {
                $(this).dialog("close");
            },
            "Submit": function () {
                var arrCount= 0;
                var myArray = new Array();

                //grabs all the dropdownlists that begin with id 'dropdownlist' and adds it to 'myArray'
                $('form').contents().find("select[id ^= 'dropdownlist'] option:selected").each(function () {
                    myArray[arrCount++] = $(this).text();
                });

                if ($('form').validate().form()) {
                    $.ajax({
                        url: "MyController/MyAction",
                        type: 'POST',
                        dataType: "json",
                        traditional: true,
                        data: { 
                           model: $("form").serialize(),
                           myArray: myArray
                        },
                        success: function (result) {
                            alert("debug: complete");
                        }
                    });
                }
            }
        }
    });

我知道如何将数组本身传递给控制器​​。但是,一旦我将现有模型添加到等式中,我不确定如何将数组传递给控制器​​。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先,简单的解决方案是:

使用一些分隔符

创建一个数组值字符串

1 ## 2 ## 3 ...或1,2,3 ..等。

并使用

public ActionResult MyAction(MyModel model, string myArray) {
     string[] values = myArray.Split("##"); //split incoming string with your separator

     List<int> myIntArray = new List<int>();
     foreach (var value in values)
     {
         int tmp = 0;
         if (int.TryParse(value, out tmp))
         {
             myIntArray.Add(tmp);
         }
     }

     //code...
}

适合简单的事情。

第二种方法稍微复杂一些但适用于对象。

假设您有以下内容:

public class YourMainModel
{
    public YourMainModel()
    {
        ArrayField = new List<YourPartialModel>()
    }

    List<YourPartialModel> ArrayField {get; set;}

    //some other fields
}

public class YourPartialModel
{
    public string Name {get; set;}

    //some other fields
}

在视图中使用某种枚举器来进行以下操作:

<form id="myForm">

//some other fields from YourMainModel here

//dealing with our array
@for (int i = 0; i < Model.ArrayField.Count(); i++)
{
    @Html.TextBox("ArrayField[" + i + "].Name", Model.ArrayField[i].Name)

    //some other fields from YourPartialModel here
}

</form>

然后

[HttpPost]
public ActionResult MyAction(YourMainModel model) {
    //use model.ArrayFields here, it should be submitted
}