31 votes

La méthode Razor ViewEngine HTML.Checkbox crée une entrée masquée. Pourquoi?

J'ai écrit le code ci-dessous sur ma page de vue;

 @Html.CheckBox("ChxName",true)
 

et j'ai eu le résultat suivant;

 <input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />
 

Pourquoi y a-t-il un élément d'entrée nommé identique avec checkbox?

42voto

ericvg Points 2270

Les cases à cocher non cochées ne sont pas publiées. Le champ masqué (défini sur false) permet à la liaison du modèle de continuer à fonctionner.

Regardez Request.Form sur le post retour. Si la case à cocher est cochée, vous verrez:

 ChxName=true&ChxName=false
 

Le classeur de modèle utilise la première valeur.

et, si la case n'est pas cochée, vous verrez:

 ChxName=false
 

3voto

Valamas - AUS Points 8359

ericvg l'a bien expliqué.

L'approche manuelle est la suivante:

 bool IsDefault = (Request.Form["IsDefault"] != "false");
 

3voto

pfeds Points 661

Ou utilisez Contains ("true") que je trouve un peu plus net ...

 bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X