Pregunta

Tengo una configuración de métodos de acción:

public ActionResult Delete(IList<Product> products)

Y una tabla de productos en mi opinión. Tengo modelo de unión trabajando para que en Enviar puedo rellenar la lista products. Pero me gustaría llenarla con sólo los productos que se seleccionan a través de una casilla de verificación.

Creo que podría hacerlo cambiando el método de acción a esto:

public ActionResult Delete(IList<Product> products, IList<int> toDelete)

Y que pasa a la lista de casillas de verificación a la toDelete pero realmente me gustaría para evitar el cambio de la firma del método, si es posible.

¿Hay una manera de pasar sólo los elementos seleccionados? O voy a tener que escribir una ModelBinder personalizada?

¿Fue útil?

Solución

No entiendo por qué no quiere cambiar la firma, pero si realmente no, basta con acceder ViewData [ "toDelete"] o

int[] toDelete;
UpdateModel(toDelete, "toDelete");

o

public class FormViewModel { 
   IList<Product> Products {get;set;}
   int[] ToDelete {get;set;} 
}

var viewmodel = new FormViewModel();
UpdateModel(viewmodel, new[]{"Products", "ToDelete"});

Otros consejos

Siempre se puede utilizar el valor de la casilla para indicar si desea eliminar el elemento o no.

El nombre de este valor se relacionaría con una propiedad en su clase de productos.

<form>
    <% for(int i = 0; i < products.Count) { %>
      <div>
        <input type="hidden" name='<%=string.Format("products[{0}].Property1", i) %>' value='<%= products[i].Property1 %>' />
        <input type="hidden" name='<%=string.Format("products[{0}].Property2", i) %>' value='<%= products[i].Property2 %>' />
        <input type="hidden" name='<%=string.Format("products[{0}].Property3", i) %>' value='<%= products[i].Property3 %>' />
        <input type="checkbox" name='<%=string.Format("products[{0}].ToDelete", i) %>' value='true' />
      </div>
    <% } %>
</form>

Entonces, cuando llegue a su eliminación (), usted podría hacer algo como:

products = products.Where(x=>x.ToDelete == false).ToList();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top