2009-12-29 5 views
2

J'ai un bulletin d'information (classe d'entité). Je passe une liste de Newsletter à une vue et affiche la liste de Newsletter dans un tableau avec chaque Newsletter d'affilée. En plus de chaque ligne du bulletin, il y a une case à cocher. Je sélectionnerai les newsletters que je souhaite envoyer en cochant la case et en cliquant sur un bouton d'envoi.ASP.Net MVC - Transmission des données sélectionnées de la vue au contrôleur (aide!)

Comment puis-je transmettre les newsletters sélectionnées au contrôleur?

Merci.

+0

Cela a-t-il été résolu? –

Répondre

1

À votre avis:

<input type="checkbox" name="newsletterIds" value="<%=newsletter.Id%>"/> 

Dans votre contrôleur cible:

public ActionResult SendNewsletters(int[] newsletterIds) 
{ 
... do something with the ids... 
} 
0

Ajoutez simplement une valeur booléenne nommée Selected à votre classe d'entité qui, lorsqu'elle sera transmise au contrôleur, indiquera au contrôleur quelles newsletters ont été sélectionnées dans votre liste.

Si vous ne voulez pas "polluer" votre classe d'entité avec des métadonnées client, vous pouvez en hériter et ajouter le bool sélectionné dans votre classe dérivée. Alternativement, votre modèle peut simplement contenir une liste séparée contenant des références à des bulletins d'information sélectionnés ou un identifiant unique avec lequel des bulletins d'information individuels peuvent ensuite être sélectionnés à partir d'une liste originale.

0

quelque chose comme ça dans votre vue:

<%= Html.CheckBox("cbNewColors", true) %><label for="cbNewColors">New colors</label> 

dans votre contrôleur, faire quelque chose comme ceci:

bool bChecked = form["cbNewColors"].Contains("true"); 
0

Vous aurez à faire un travail manuel, puisque MVC ajoute des champs cachés pour chaque case à cocher, et s'appuie sur le classeur modèle pour traiter la valeur true,false provenant de la soumission du formulaire (si la case a été cochée).

En supposant que vous avez des identifiants uniques disponibles dans votre point de vue, je recommande ce qui suit:

  1. créer manuellement les cases à cocher (c.-à ne pas utiliser l'assistant Html) avec le même nom

    < input type = nom "case" = valeur "newsletters" = "nl_ [id]" id = "nl_ [id]" /> [nom] </label>

  2. Accepter un paramètre string[] newsletters dans votre action gère le poste. (Vous peut besoin d'accepter une chaîne, puis le diviser sur des virgules, je ne me souviens pas array newslettersArray = newsletters.Split(',');;)

  3. Convertir la chaîne dans une liste d'ID de bulletin faire quelque chose comme ceci:

    var . ids = newsletters.Select (n => int.Parse (n.Substring (2)) ToList();

Questions connexes