如何在asp.net mvc和C#中使用序列化数据

我使用jQuery UI可排序来对DOM中的列表进行排序.我成功地将一个ajax函数发送到我的mvc动作:

list[]=2&list[]=3&list[]=28&list[]=1

我试图弄清楚如何将这个序列化的数字列表放入List< int>所以我实际上可以从C#访问它们.

我该怎么做?我已经尝试过这种方法:

    [HttpPost]
    public string RoleTierUpdate( string[] form)
    {
        StringBuilder sb = new StringBuilder();

        foreach (var item in form)
        {
            sb.AppendFormat("id: {0}<br />", item);
        }

        return sb.ToString();
    }

我以为我可以将字符串数组转换为整数列表.但是这返回了以下输出:

    id: 2
    id: ,
    id: 3
    id: ,
    id: 2
    id: 8
    id: ,
    id: 1

将这些数据放入int列表是否更容易?

编辑

这是执行ajax帖子的代码:

<script type="text/javascript">
    // Sortable
    $(document).ready(function () {
        $("#sortThis").sortable({
            handle: '.handle',
            update: function () {

                // get new order
                var order = $('#sortThis').sortable('serialize');

                // excecute ajax for db update
                $.post(
                    "/find/AdminMember/RoleTierUpdate/",
                    order,
                    function (data) {
                        $("#info").html(data);
                    }
                );

                $("#info2").html(">>" + order + "<<");
            }
        });

    });
</script>

order包含我在上面显示的字符串.

编辑2

更新控制器:

    [HttpPost]
    public string RoleTierUpdate( List<int> list, MemberData md) // change to List<int> list
    {
        StringBuilder sb = new StringBuilder();

        if (list != null) // added check for null
        {
            foreach (var item in list)
            {
                sb.AppendFormat("id: {0}<br />", item);
            }
        }
        else {
            sb.Append("form is null");
        }

        return sb.ToString();
    }

将ajax更新为:

    $(document).ready(function () {

        jQuery.ajaxSettings.traditional = true; // added

        $("#sortThis").sortable({
            handle: '.handle',
            update: function () {

                // get new order
                var order = $('#sortThis').sortable('serialize');

                // excecute ajax for db update
                $.post(
                    "/find/AdminMember/RoleTierUpdate/",
                    order,
                    function (data) {
                        $("#info").html(data);
                    }
                );

                $("#info2").html(">>" + order + "<<");
            }
        });

    });

这个输出是:

form is null

最佳答案 似乎MVC的模型绑定器不愿意绑定字符串的原因

list[]=2&list[]=3&list[]=28&list[]=1 

到列表< int>列表是因为键中的“[]”.我将这个javascript添加到我的jQuery中:

// get new order
 var order = $('#sortThis').sortable('serialize');
 order = order.replace(/\[\]/gi, "")

一旦我从按键中取出“[]”,一切都很棒.该操作返回此结果:

id: 2
id: 3
id: 28
id: 1

这正是我所需要的.模型绑定到List< int>工作得很好.

点赞