Question

J'ai une configuration de la méthode d'action:

public ActionResult Delete(IList<Product> products)

Et une table de produits, à mon avis. J'ai modèle de liaison de travail afin que je puisse le soumettre compléter la liste products. Mais je voudrais le remplir avec uniquement les produits qui sont sélectionnés via une case à cocher.

Je pense que je pourrais le faire en changeant la méthode d'action à ceci:

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

Et en passant la liste des cases à cocher au toDelete mais je voudrais vraiment éviter de changer la signature de la méthode si possible.

Y at-il un moyen de transmettre uniquement les éléments sélectionnés? Ou vais-je devoir écrire un ModelBinder personnalisé?

Était-ce utile?

La solution

Je ne comprends pas pourquoi vous ne voulez pas changer la signature, mais si vous ne vraiment pas, l'accès juste ViewData [ « toDelete »] ou

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

ou

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

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

Autres conseils

Vous pouvez toujours utiliser la valeur de case à cocher pour indiquer si vous souhaitez supprimer l'élément ou non.

Le nom de cette valeur concernerait une propriété dans votre catégorie de produits.

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

Alors, quand vous arrivez à votre Delete (), vous pouvez faire quelque chose comme:

products = products.Where(x=>x.ToDelete == false).ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top