web-dev-qa-db-fra.com

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 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?

37
tugberk

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
49
ericvg

ericvg l'a bien expliqué.

L'approche manuelle est la suivante:

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

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

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