J'ai écrit le code ci-dessous sur ma page d'affichage;
@Html.CheckBox("ChxName",true)
et j'ai obtenu 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é comme le même avec la case à cocher?
Les cases à cocher non cochées ne sont pas publiées, donc le champ masqué (défini comme faux) permet à la liaison de modèle de continuer à fonctionner.
Regardez Request.Form sur le post. Si la case 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
ericvg l'a bien expliqué.
L'approche manuelle est la suivante:
bool IsDefault = (Request.Form["IsDefault"] != "false");
Ou utilisez Contains ("true") que je trouve un peu plus soigné ...
bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");