2010-03-27 85 views
3

第三次嘗試解決這個今晚 - 嘗試一種不同於現在的方法。jQuery Sortable .toArray with ASP.NET MVC ActionResult

提供的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(); 

的 '警報'是否顯示正確的項目。它顯示'item1,item2'等,但我的ASP.NET MVC ActionResult沒有得到任何東西。該方法會觸發,但'items'參數爲空。有任何想法嗎?

回答

2

貌似系列化問題被解決jQuery 1.4.2(見related question)。


原來的答覆:
我八九不離十想通了答案,但你很可能不喜歡它=)。

在Phil Haack的博客上查看form post example,只要你的輸入元素都具有相同的名稱,它們將被放入一個列表中。我試圖映射字符串數組對象的數組,像這樣:

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

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

,當我做了我提交了正確長度的非空數組,但每個單元爲空。問題是,(根據螢火蟲)的post數據是這樣的:

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

這是接近我想要的東西,但也不能令人信服。我真正想要的提交是一些看起來像這樣:

items item1 
items item2 

,因爲這基本上就是在菲爾的例子的形式在做什麼。我不知道如何獲得JSON序列化一樣,所以我欺騙和手工創建的字符串,像這樣:

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

這個工作。當我在動作中檢查了items數組的值時,它在「item1」和「item2」中有兩個字符串。所以看起來你可以通過手動序列化數據(可以這麼說)並使用字符串作爲ajax調用的參數來讓你的代碼工作。不知怎的,這感覺就像是錯誤的路要走,所以我希望有人用一種更爲正確的方式糾正我。

+0

其實我很喜歡這個。非常棒。非常感謝你! – Ciel 2010-03-27 02:41:13

+1

必須是命運,我昨天碰到了Phil Haack的帖子,同時尋找要放入演示文稿的東西在爲什麼我們應該把我們的項目移動到ASP.NET MVC的工作上。 – R0MANARMY 2010-03-27 02:42:59

0

你可以嘗試使用

data: { 'items[]': items } 

,因爲項目是一個數組,這是一個半猜測,但我認爲它很重要,它是值得一試:)

+0

:(沒有。它沒有工作。 – Ciel 2010-03-27 00:47:51

相關問題