Domanda

Ho un setup metodo di azione:

public ActionResult Delete(IList<Product> products)

E un tavolo di prodotti nel mio punto di vista. Ho avuto Modello Binding lavoro in modo che su Invia posso compilare l'elenco products. Ma vorrei popolarlo con solo i prodotti che vengono selezionati tramite una casella di controllo.

Credo che avrei potuto farlo modificando il metodo di azione a questo:

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

E passando l'elenco delle caselle di controllo per la toDelete ma mi piacerebbe davvero per evitare di cambiare la firma del metodo, se possibile.

C'è un modo per passare solo gli elementi selezionati? O sono costretta a scrivere un ModelBinder personalizzato?

È stato utile?

Soluzione

Non capisco il motivo per cui non si desidera cambiare la firma, ma se davvero non, basta accedere 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"});

Altri suggerimenti

Si può sempre utilizzare il valore casella per indicare se eliminare l'oggetto oppure no.

Il nome di questo valore si riferirebbe a una proprietà nella classe del prodotto.

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

Poi, quando si arriva al tuo Elimina (), si potrebbe fare qualcosa di simile:

products = products.Where(x=>x.ToDelete == false).ToList();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top