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?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top