2010-06-11 8 views
0

J'utilise string[] roles = Roles.GetAllRoles() pour obtenir une chaîne [] de tous les rôles d'appartenance ASP.NET pour mon application. J'envoie les rôles à ma vue dans ViewData et en utilisant un foreach pour créer un ensemble de cases à cocher en utilisant <%: Html.CheckBox("RoleCheckBox") %>. Il y a 3 rôles et ma vue rend 3 cases à cocher. Quand je fais une vue/source, je vois les cases à cocher et leurs étiquettes cachées correspondantes. Ils ont tous la même chose, donc il y a 6 tags avec le nom "RoleCheckBox" - 3 qui rendent les cases à cocher et 3 qui sont cachés.ASP.NET MVC 2 - Cases à cocher

Le problème vient quand je poste le formulaire à mon contrôleur et lie les résultats - quelque chose comme public ActionResult Create(Person person, string[] RoleCheckBox). Je reçois quatre cordes et je n'ai aucune idée d'où vient la quatrième corde ("faux"). Je pourrais faire quelques essais en essayant diverses combinaisons de contrôles pour voir lequel (espérons-le) ne change pas et l'ignorer mais c'est juste moche.

Est-ce que quelqu'un sait pourquoi cela se produirait?

Merci,

Jay

+0

Je ne comprends pas ce que vous dites - vous générez trois cases à cocher avec le même identifiant HTML/nom de formulaire? N'est-ce pas simplement demander des ennuis - ne pouvez-vous pas leur donner des noms uniques? Ou vous comptez sur ASP.NET pour leur donner des noms hiérarchiques uniques? L'explication des hiddens: certains anciens navigateurs omettaient simplement les cases à cocher des données postées afin que vous n'obtiendiez aucune valeur retournée pour les cases qui n'étaient pas cochées. Les assistants MVC génèrent le caché de sorte que dans ces cas, il y aura toujours une valeur nommée RoleCheckBox retournée. – Rup

Répondre

0

Le « faux » supplémentaire vient parce qu'il ya une paire (tableau) produit lorsque la case est cochée, par exemple "vrai faux". Le deuxième faux vient de la valeur cachée. Si elle n'est pas cochée, vous n'obtenez aucune valeur initiale car la case à cocher ne renvoie rien.

This link explique plus en détail et recommande de faire une boucle dans les clés de formulaire et d'utiliser "GetValues ​​()" sur chaque élément, puis obtenir le premier élément dans le tableau résultant.