2010-07-22 8 views
13

Tôi đã triển khai JQuery có thể sắp xếp và nó hoạt động tốt. Vấn đề là tôi không thể vượt qua danh sách theo thứ tự mới của nó đến một bộ điều khiển để tôi có thể lưu nó.Lưu JQuery Sắp xếp (thứ tự mới) vào bộ điều khiển 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> 

và bộ điều khiển của tôi:

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

mục trở lại với số lượng corrent của các yếu tố - ngoại trừ mỗi mục là chuỗi rỗng.

Nếu danh sách ban đầu trông như thế này

  1. 1 - Xe
  2. 2 - Thuyền
  3. 3 - Xe máy
  4. 4 - Plane

Và khi người dùng kéo và khu nghỉ dưỡng là

  1. 4 - Plane
  2. 1 - Xe
  3. 3 - Xe máy
  4. 2 - Thuyền

Làm thế nào tôi có thể vượt qua mà trật tự mới? Tôi cho rằng id vượt qua toàn bộ nội dung khi gửi, xóa toàn bộ danh sách và gửi lại toàn bộ danh sách này

trừ khi có cách nào tốt hơn? Lợi dụng LINQ (sử dụng LINQ to SQL) nơi tôi có thể chèn thứ tự mới trên everychange và thực hiện thay đổi gửi?

Trả lời

9

Tất cả tôi phải làm là điền vào các trường id cho mỗi mục, toArray phương pháp trở lại danh sách tốt sau đó

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

Một điều tôi đã nghĩ đến, mặc dù không chắc chắn liệu nó có hợp lệ hay không, đó là điều gì sẽ xảy ra nếu id của bạn xung đột với một thứ khác trên trang? Ví dụ: tôi đang sử dụng nhiều danh sách, trong đó mỗi phụ huynh trong danh sách có id số và mỗi mục có id số và phạm vi chồng chéo của cấp độ gốc và id con. Vì vậy, làm điều này, có thể phá vỡ quy tắc của mỗi phần tử có một id duy nhất. Vì vậy, thay vào đó tôi thêm một cái gì đó vào id, ví dụ: id "+ cha mẹ" và id "con" – jamiebarrow

0

Trong bảng bạn có thể tạo đầu vào ẩn, điều này có thể giúp bạn gửi các giá trị để điều khiển của bạn, hơn là bạn dễ dàng có thể lưu nó;)

nó phải là như thế này:

<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> 

Hy vọng nó giúp;)