Le rendu Nullable Bool comme Case
Je suis de nouveau à partir de WebForms à la MVC. J'ai vue le modèle de champ avec le type bool?
et, par défaut, EditorFor()
rend ce champ comme un DropDownList avec un "Non Défini". Je préfère rendre sous la forme d'une Case à cocher et, si la valeur est null, il suffit de le régler à décochée.
Le nom du champ est RFP.DatesFlexible
et donc j'ai écrit le texte suivant de mon point de vue:
<input type="checkbox" id="RFP_DatesFlexible" name="RFP.DatesFlexible" />
<label for="RFP_DatesFlexible">My Dates are Flexible</label>
Mais cela ne fonctionne pas. Le résultat est toujours nul et ModelState.IsValid
est faux.
Quelqu'un peut dire comment je pourrais faire ce travail?
MODIFIER
C'est le code que j'ai fini avec, qui semble bien fonctionner.
@Html.CheckBox("RFP.DatesFlexible", Model.RFP.DatesFlexible ?? false)
@Html.Label("RFP.DatesFlexible", "My Dates are Flexible")
L'étiquette est correctement associé à la case à cocher de sorte qu'en cliquant sur le texte bascule la case à cocher.
OriginalL'auteur Jonathan Wood | 2011-12-13
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela?
Modèles:
Contrôleur:
Vue:
Bon, ensuite de le modifier pour cela:
@Html.CheckBox("DatesFlexible", Model.DatesFlexible != null && (bool)Model.DatesFlexible)
. Cela fonctionne, je l'ai juste testé. (DP est une propriété d'un autre modèle? De modèle.L'appel d'offres.DatesFlexible? Si oui, vous aurez probablement besoin d'un nom à l'entrée de la façon dont vous l'avez dans votre question, je ne me souviens pas de la main gauche)Qui compile--merci. Cependant, le champ est encore
null
quand la page est soumise. De toute façon, il n'est pas ramasser le contrôle est associé au champ. (Le champ est Modèle.L'appel d'offres.DatesFlexible.)Hmm, semble fonctionner très bien pour moi quand j'ai renommer le champ de l'appel d'offres.DatesFlexible (et de changer de Modèle.DatesFlexible de Modèle.L'appel d'offres.DatesFlexible). Question bête: avez-vous de la case à cocher et le bouton de validation enveloppé dans un formulaire?
Oui, j'ai un formulaire et d'autres valeurs sont définies comme prévu. Pour clarifier, vous dites est publier les valeurs de la case à cocher lorsque vous testez? Est votre champ de type
bool?
?OriginalL'auteur hawkke
Tout d'abord, je pense qu'il serait utile de comprendre comment
Html.CheckBox
œuvres. Ce n'est pas tout à fait ce que vous attendez. Jetez un oeil à HTML.Case ComportementPour répondre à votre question, la raison de votre code ne fonctionne pas c'est parce que votre
<input />
nécessite unvalue='true'
à lier correctement. Par exemple:Et ajouter un
checked='checked'
propriété si elle doit être vérifié.C'est pourquoi j'ai l'habitude de remplacer le
Html.CheckBox
méthode avec mes propres. L'implémentation par défaut est tout simplement déroutant.@Html
syntaxe, car il offre certains avantages. Et, bien sûr, si j'examine le balisage, il ne contient pas l'attributvalue='true'
.Votre code ci-dessus semble parfait, c'est exactement ce que j'aurais fait.
OriginalL'auteur Scott Rippey
Je sais que c'est marqué comme acceptées, mais j'ai eu le même problème mais j'ai été une itération sur les sous-éléments donc j'ai eu le problème avec le nom du paramètre booléen? isOpen
Lorsque je l'ai utilisé c'est de ne se lier à ce Dernier post mais rendu la liste déroulante:
Cela rendait la case, mais où les valeurs null dans le post:
En regardant le rendu html, j'ai fait cela dans la vue de résoudre:
Je sais que c'est sais que c'est un peu rapide n sale, mais il a travaillé
Espère que cela aide quelqu'un, quelque part.
OriginalL'auteur Tomas Hesse