Modell eine IList ausgewählte Elemente Bindung nur
-
19-09-2019 - |
Frage
Ich habe eine Aktionsmethode Setup:
public ActionResult Delete(IList<Product> products)
Und eine Tabelle von Produkten aus meiner Sicht. Ich habe Modell Bindung bekam, so dass anschließend auf Arbeits ich die products
Liste füllen kann. Aber ich mag es zu bevölkern nur mit den Produkten, die über ein Kontrollkästchen aktiviert werden.
Ich denke, dass ich es durch eine Änderung der Aktionsmethode zu dies tun könnte:
public ActionResult Delete(IList<Product> products, IList<int> toDelete)
Und die toDelete
die Liste der Kontrollkästchen vorbei, aber ich würde wirklich die Methodensignatur, wenn möglich, zu vermeiden, wie zu verändern.
Gibt es eine Möglichkeit nur die ausgewählten Elemente zu übergeben? Oder werde ich habe einen benutzerdefinierten Modelbinder zu schreiben?
Lösung
Ich verstehe nicht, warum Sie wollen nicht die Signatur ändern, aber wenn Sie wirklich nicht, nur Viewdata zugreifen [ „toDelete“] oder
int[] toDelete;
UpdateModel(toDelete, "toDelete");
oder
public class FormViewModel {
IList<Product> Products {get;set;}
int[] ToDelete {get;set;}
}
var viewmodel = new FormViewModel();
UpdateModel(viewmodel, new[]{"Products", "ToDelete"});
Andere Tipps
Sie können immer das Kontrollkästchen Wert verwenden, um anzuzeigen, ob das Element zu löschen oder nicht.
Der Name dieses Wertes würde in Ihrer Produktklasse auf eine Eigenschaft beziehen.
<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>
Wenn Sie dann zu Ihrem Delete () erhalten, könnte man so etwas tun:
products = products.Where(x=>x.ToDelete == false).ToList();