Attention : Cette question a plus de neuf ans !
La meilleure option est de rechercher des questions plus récentes, ou de rechercher les réponses ci-dessous en fonction de votre version spécifique de MVC, car de nombreuses réponses sont désormais obsolètes.
Si vous trouvez une réponse qui fonctionne pour votre version, veuillez vous assurer que la réponse contient la version de MVC que vous utilisez.
(La question originale commence ci-dessous)
Cela me semble un peu bizarre, mais d'après ce que je sais, c'est comme ça qu'il faut faire.
J'ai une collection d'objets et je veux que les utilisateurs puissent sélectionner un ou plusieurs d'entre eux. Cela me dit "formulaire avec cases à cocher". Mes objets n'ont aucun concept de "sélectionné" (ce sont des POCO rudimentaires formés par la désérialisation d'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 le seul moyen que je vois pour savoir quels objets l'utilisateur a coché :
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
D'abord, c'est bizarre, et ensuite, pour les éléments que l'utilisateur a cochés, le FormCollection liste sa valeur comme "true false" plutôt que juste true.
Manifestement, je rate quelque chose. Je pense qu'il est construit avec l'idée en tête que les objets de la collection sur lesquels on agit dans le formulaire html sont mis à jour à l'aide de la fonction UpdateModel()
ou à travers un ModelBinder.
Mais mes objets ne sont pas configurés pour cela ; cela signifie-t-il que c'est la seule façon de procéder ? Existe-t-il un autre moyen de procéder ?
2 votes
D'autres personnes pourraient trouver cette solution utile : stackoverflow.com/questions/3291501/