jQuery Sortable .toArray 与 ASP.NET MVC ActionResult

3

今晚第三次尝试修复此问题-现在正在尝试不同的方法。

给定一个jQuery可排序列表..

<ul id="sortable1" class="connectedSortable">
    <li class="ui-state-default" id="item1">Item 1</li>
    <li class="ui-state-default" id="item2">Item 2</li>
    <li class="ui-state-default">Item 3</li>
    <li class="ui-state-default ">Item 4</li>
    <li class="ui-state-default">Item 5</li>
</ul>

<ul id="sortable2" class="connectedSortable">
</ul>

关于ASP.NET MVC ActionResult...

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Insert( string[] items )
    {
        return null;
    }

由JavaScript激活...

        $("#sortable1, #sortable2").sortable({
            connectWith: '.connectedSortable',
            dropOnEmpty: true,
            receive: function () {
                var items = $(this).sortable('toArray');
                alert(items);
                $.ajax({
                    url: '/Manage/Events/Insert',
                    type: 'post',
                    data: { 'items': items }
                });
            }
        }).disableSelection();

'alert'确实显示了正确的项目。它显示了'item1,item2'等等。但是我的ASP.NET MVC ActionResult什么也没有得到。该方法确实被触发,但是'items'参数为空。有什么想法吗?

2个回答

2
看起来在jQuery 1.4.2中已解决序列化问题(请参见相关问题)。

原始答案:
我有点想到了答案,但你可能不会喜欢它=)。

查看Phil Haack博客上的表单提交示例,只要您的输入元素都具有相同的名称,它们就会被放入列表中。我尝试将字符串数组映射到对象数组,如下所示:

var items = $.map( 
    $(this).sortable('toArray'),
    function(item, index){
        return {"item": item};
    }
);

$.ajax({
    url: '/Home/Insert',
    type: 'post',
    data: { items: items }
});

当我提交时,我得到了一个非空的数组,长度正确,但每个单元格都是null。问题在于(根据firebug),POST参数看起来像这样:

items[0][item]  item1
items[1][item]  item2

这个很接近我想要的,但还不太一样。我真正想提交的是像这样的东西:

items   item1
items   item2

因为这基本上是Phil示例中的表单所做的。我不知道如何让JSON像那样序列化,所以我作弊了,手动创建了字符串,如下所示:

$.ajax({
    url: '/Home/Insert',
    type: 'post',
    data: 'items=items1&items=items2'
});

这个方法可行。当我在操作中检查 items 数组的值时,它里面有两个字符串 "item1" 和 "item2"。因此看起来你可以手动序列化数据,并将字符串作为 ajax 调用的参数来让你的代码运行。但这种方式似乎不太对,希望有人能指出更好的方法。


1
昨天我在工作中寻找有关为什么我们应该将项目迁移到ASP.NET MVC的材料时,偶然看到了Phil Haack的帖子。这一定是缘分。 - Roman

0

你可以尝试使用

data: { 'items[]': items }

由于items是一个数组,这只是半猜测,但我认为它很重要,值得一试 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接