2010-07-22 14 views
13

Zaimplementowałem JQuery do sortowania i działa dobrze. Problem polega na tym, że nie mogę przekazać listy w nowej kolejności do kontrolera, więc mogę go zapisać.Saving JQuery Sortable (nowa kolejność) do kontrolera 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> 

i mój kontroler:

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

Elementy list wraca z numerem corrent elementów - z wyjątkiem każdej pozycji są puste ciągi.

Jeśli oryginalna lista wygląda następująco

  1. 1 - Car
  2. 2 - Boat
  3. 3 - Motocykl
  4. 4 - Plane

I użytkownik przeciągnie i ośrodków być

  1. 4 - Plane
  2. 1 - Car
  3. 3 - Motocykl
  4. 2 - Boat

Jak mogę przekazać, że nowy porządek? Przypuszczam, że id przekazuje całość na przesłaniu, usuń całą listę i ponownie prześlij całą listę

, chyba że jest lepszy sposób? Korzystając z Linq (używając Linq do SQL), gdzie mogę wstawić nowe zamówienie na everychange i złożyć zmiany?

Odpowiedz

9

Wszystko co musiałem zrobić, to wypełnić pole ID dla każdego elementu listy, toArray metoda zwrócił listy grzywny po tym

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

Jedną z rzeczy, o której pomyślałem, choć nie jestem pewien, czy jest ona ważna czy nie, jest, jeśli twój id jest w konflikcie z czymś innym na stronie? Na przykład używam wielu list, gdzie każdy rodzic listy ma numeryczny identyfikator, a każdy element ma numeryczny identyfikator, a zakresy identyfikatorów nadrzędnego i podrzędnego pokrywają się. Czyniąc to, może złamać regułę każdego elementu posiadającego unikalny identyfikator. Więc zamiast tego dodam coś do id, np. "rodzic" + identyfikator i "dziecko" + identyfikator – jamiebarrow

0

w tabelach można tworzyć ukryte wejścia, może to pomóc odpowiedzieć wartości do kontrolera, niż można łatwo zapisać go;)

to powinno być tak:

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

Nadzieja pomaga;)

Powiązane problemy