Attention: cette question a plus de neuf ans!
Votre meilleure option est de rechercher de nouvelles questions ou de rechercher les réponses ci-dessous à la recherche de votre version spécifique de MVC, car de nombreuses réponses sont obsolètes maintenant.
Si vous trouvez une réponse qui fonctionne pour votre version, assurez-vous que la réponse contient la version de MVC que vous utilisez.
(La question d'origine commence ci-dessous)
Cela me semble un peu bizarre, mais pour autant que je sache, c'est comme ça que vous le faites.
J'ai une collection d'objets et je souhaite que les utilisateurs en sélectionnent un ou plusieurs. Cela me dit "formulaire avec des cases à cocher". Mes objets n'ont aucun concept de "sélectionné" (ce sont des POCO rudimentaires formés en désérialisant un appel wcf). Donc, je fais ce qui suit:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
Dans la vue:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
Et, dans le contrôleur, c'est la seule façon dont je peux voir pour déterminer quels objets l'utilisateur a vérifiés:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
C'est bizarre en premier lieu, et deuxièmement, pour les éléments que l'utilisateur a vérifiés, le FormCollection répertorie sa valeur comme "vrai faux" plutôt que juste vrai.
De toute évidence, il me manque quelque chose. Je pense que cela est construit avec l'idée à l'esprit que les objets de la collection qui sont traités dans le formulaire html sont mis à jour à l'aide UpdateModel()
ou via un ModelBinder.
Mais mes objets ne sont pas configurés pour cela; cela signifie-t-il que c'est le seul moyen? Y a-t-il une autre façon de procéder?