0

'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");
                        }
                    });
                }
            }
        }
    });

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

4

1 回答 1

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
}
于 2012-10-30T16:53:41.893 回答