2010-07-22 41 views
13

我已經實現了JQuery可排序,並且工作正常。問題是我無法將其新順序的列表傳遞給控制器​​,因此我可以保存它。將JQuery Sortable(新訂單)保存到ASP.Net MVC控制器?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#sortable").sortable({ axis: "y" }); 
    }); 

    $(function() { 
     $("#submit-list").button(); 

     $("#submit-list").click(function() { 
      debugger; 
      $.ajax({ 
       url: '/Admin/SortedLists/', 
       data: { items: $("#sortable").sortable('toArray') }, 
       type: 'post', 
       traditional: true 
      }); 
     }); 

    }); 
</script>  

<h2>Edit Roles</h2> 

<div> 
    <ul id="sortable"> 
     <% foreach (var item in Model.Roles) { %>     
      <li>     
       <%=Html.AttributeEncode(item.Name)%>        
      </li>                    
     <% } %>    
    </ul> 

    <input type="submit" value="Save" id="submit-list"/> 
</div> 

和我的控制器:

[HttpPost] 
    public EmptyResult SortedLists(List<string> items) 
    { 
     return new EmptyResult(); 
    } 

列表項回來與元素的corrent數量 - 除了每個項目都是空字符串。

如果原始表看起來是

  1. 1 - 汽車
  2. 2 - 船
  3. 3 - 摩托車
  4. 4 - 平面

而且用戶拖動和度假村

  1. 4 - 平面
  2. 1 - 汽車
  3. 3 - 摩托車
  4. 2 - 船

如何傳遞新秩序?我想id通過提交整個事情,刪除整個列表,並重新提交整個列表

除非有更好的辦法?利用Linq(使用Linq to SQL),我可以在每個變化上插入新訂單並進行提交更改?

回答

9

我所要做的就是填寫每個列表項id字段,toArray方法後

<ul id="sortable"> 
    <% foreach (var item in Model.Roles) { %>     
     <li id="<%=Html.AttributeEncode(item.Name)%>"><%=Html.AttributeEncode(item.Name)%></li>                      
    <% } %>    
</ul> 
+0

我想過的一件事,雖然不知道它是否有效,但如果你的ID與頁面上的其他內容發生衝突,該怎麼辦?例如,我使用多個列表,其中列表的每個父級都有一個數字ID,每個項目都有一個數字ID,並且父級和子級ID的範圍重疊。所以這樣做可以打破每個具有唯一ID的元素的規則。因此,我會在內容前添加一些內容,例如「parent」+ id和「child」+ id – jamiebarrow 2010-08-05 13:41:40

0

在表格中,您可以創建隱藏的輸入返回的列表罰款,這可以幫助你張貼值到控制器,比你可以輕鬆將它保存;)

它應該是這樣的:

<form method="post" action="~/NameController/yourAction"> 
    <ul id="sortable1"> 

    <li><input type="hidden" id="id" name="Id"/></li> 
    <li><input type="hidden" id="UserId" name="UserId"/></li> 
    <li><input type="hidden" id="TeamId" name="TeamId"/></li> 

</ul> 
    <button type="submit">Save</button> 
</form> 

希望它幫助;)