Dans mon application ASP.NET MVC, j'effectue le rendu d'une case à cocher à l'aide du code suivant:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Maintenant, je vois que cela rend à la fois la balise d'entrée de case à cocher et une balise d'entrée masquée. Le problème que je rencontre est lorsque j'essaye de récupérer la valeur de la case à cocher à l'aide de FormCollection:
FormValues["ReceiveRSVPNotifications"]
J'obtiens la valeur "vrai, faux". En regardant le HTML rendu, je peux voir ce qui suit:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Ainsi, la collection FormValues semble joindre ces deux valeurs puisqu'elles portent le même nom.
Des idées?
la source
<input>
balise.false
. Regardez la réponse de RyanJMcGowan ci-dessous: "L'envoi d'une entrée masquée permet de savoir que la case à cocher était présente sur la page lorsque la demande a été soumise."J'ai eu le même problème que Shawn (ci-dessus). Cette approche peut être excellente pour POST, mais elle est vraiment nulle pour GET. Par conséquent, j'ai implémenté une simple extension Html qui ne fait que supprimer le champ caché.
Le problème que j'ai maintenant est que je ne veux pas qu'une modification du framework MVC brise mon code. Je dois donc m'assurer d'avoir une couverture de test expliquant ce nouveau contrat.
la source
J'utilise cette méthode alternative pour afficher les cases à cocher des formulaires GET:
C'est similaire à la méthode de Chris Kemp , qui fonctionne bien, sauf que celle-ci n'utilise pas le sous
CheckBoxFor
- jacent etRegex.Replace
. Il est basé sur la source de laHtml.CheckBoxFor
méthode originale .la source
Voici le code source de la balise d'entrée supplémentaire. Microsoft a eu la gentillesse d'inclure des commentaires qui traitent précisément de cela.
la source
Je pense que la solution la plus simple est de rendre l'élément INPUT directement comme suit:
Dans la syntaxe Razor, c'est encore plus facile, car l'attribut 'vérifié' est directement rendu avec une valeur "vérifié" lorsqu'il est donné une valeur côté serveur "vraie".
la source