Les champs de formulaire masqué ne figurant pas dans le Modèle MVC après le post-retour

J'ai un nouveau MVC 4 Application avec une assez basique Vue/Contrôleur. Le Modèle associé contient un certain nombre de propriétés que j'ai mappé à Caché des champs de formulaire. Lorsque la Page s'affiche la première fois (, par exemple via les HttpGet Action), tout a l'air très bien. Mais lorsque le formulaire est en Post ed en sélectionnant le bouton Soumettre le Modèle présenté à l'Action n'a plus le champ Caché ensemble de valeurs. Voici un pas à pas les indications.

Voici un échantillon de la Modèle:

public class Application
{
    public bool ShowSideBars { get; set; }
}

Ici est la première Contrôleur *Action* (qui semble bien fonctionner):

[HttpGet]
public ActionResult Application()
{
    var model = Request.ParseFromQueryString<Application>();
    model.ShowSideBars = true;

    return View(model);
}

Il correspond à la Vue comme suit:

<fieldset>
    @Html.HiddenFor(m => m.ShowSideBars)
...
</fieldset>

Cette résultats dans la suite de mark-up être rendu à l'intérieur du fieldset:

<input data-val="true" data-val-required="The ShowSideBars field is required." id="ShowSideBars" name="ShowSideBars" type="hidden" value="True" />

Note: je voudrais bien que je savais pourquoi MVC a décidé d'ajouter le "... le terrain est nécessaire de contenu " quand je n'ai pas le marquer comme nécessaire, mais c'est une autre question

Ici est la Action qui est appelée lorsque le formulaire est soumis. À ce stade, les biens susmentionnés n'est plus fixé à 'vrai'.

[HttpPost]
public ActionResult Application(Application application)
{
    //Other work done here

    return View(application);
}

À l'heure actuelle, il n'existe pas de Modèle personnalisé Liants. Aussi, j'ai testé quelques autres types de données et je vois la même chose.

Quelqu'un peut m'expliquer pourquoi la forme cachée valeurs ne sont pas retournés? Suis-je juste le faire tout faux?

Le data-val-required est en cours de rendu, parce que le modèle type est bool. Bool par défaut sont requis, ils doivent être vraie ou fausse. Si vous ne voulez pas voir les données-val-requis, de faire de la propriété un bool?.
En aparté, les Annotations de Données ajoute "requis" pour tout type non nullable. Entiers et les Booléens va automatiquement être marqué comme requis.
Excellente idée! merci. Cela permettra d'éviter un peu de ballonnement dans l'ensemble de la taille de la page.
Est le ShowSlideBars initialement sur la chaîne de requête?
Je suis en supposant que vous avez enveloppé le champ dans un formulaire appelé "demande" et que vous êtes de passage à d'autres champs vers le modèle qui s'rempli?

OriginalL'auteur JoeGeeky | 2012-03-19