2010-07-22 17 views
13

He implementado JQuery ordenable, y funciona bien. El problema es que no puedo pasar la lista en su nuevo orden a un controlador para poder guardarla.¿Guardar JQuery ordenable (nuevo pedido) para el controlador 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> 

y mi controlador:

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

elementos de la lista vuelve con el número de elementos Corrent - excepto que cada elemento son cadenas vacías.

Si la lista original están presentes

  1. 1 - coches
  2. 2 - Barco
  3. 3 - Motocicleta
  4. 4 - Plano

Y el usuario arrastra y centros turísticos ser

  1. 4 - Plano
  2. 1 - coches
  3. 3 - Motocicleta
  4. 2 - Barco

¿Cómo puedo pasar ese orden nuevo? Supongo que id pasar todo el asunto en el envío, eliminar toda la lista y volver a enviar toda esta lista

a menos que haya una mejor manera? ¿Aprovechando Linq (usando Linq a SQL) donde puedo insertar el nuevo pedido en cada cambio y hacer un envío?

Respuesta

9

Todo lo que tenía que hacer era llenar el campo ID para cada elemento de la lista, toArray método devuelve la lista bien después de eso

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

Una cosa en la que pensé, aunque no estoy seguro de si es válida o no, ¿qué pasa si el conflicto de su id con algo más en la página? Por ejemplo, estoy usando múltiples listas, donde cada padre de la lista tiene una identificación numérica, y cada elemento tiene una identificación numérica, y los rangos de la identificación padre e hijo se superponen. Por lo tanto, al hacer esto, puede romperse la regla de que cada elemento tenga una identificación única. Por lo tanto, prefiero algo al ID, p. "padre" + id, e "hijo" + id – jamiebarrow

0

En las tablas se pueden crear entradas ocultas, esto puede ayudar a que usted fije los valores a su controlador, lo que fácilmente puede guardarlo;)

debería ser así:

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

creo que sirve;)

Cuestiones relacionadas