MVC 4 Modèle personnalisé pour bool (rasoir)
Je suis en utilisant le twitter bootstrap cadre, de sorte à obtenir le EditorFor et méthode displayfor méthodes à la sortie de ce dont j'ai besoin, j'ai créé des modèles personnalisés pour chacun des types, comme la chaîne de texte, mot de passe etc. Pour ma page de connexion, je veux un RememberMe bool, alors qu'avant, j'ai créé le modèle suivant et mis en en valeur Booléenne.cshtml:
@model bool
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.CheckBoxFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
Assez simple, mais quand j'utilise:
@Html.EditorFor(m => m.RememberMe)
J'obtiens une exception dire la valeur bassed ne peut pas être null:
The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Boolean'.
Ce qui me manque? Semble comme il devrait être simple. Le terrain, sur le modèle objet ressemble comme suit:
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
Grâce.
Mise à JOUR: il semble Donc qu'à la fin, c'est une question de la création d'un vide modèle de vue de l'objet et de le transmettre à la vue, au lieu de laisser MVC en créer un sur son propre.
source d'informationauteur Tyrel Van Niekerk
Vous devez vous connecter pour publier un commentaire.
Je ne voudrais pas le faire de cette façon. Si la valeur peut être nulle, je voudrais assurez-vous que votre éditeur de modèle a nullable booléenne que le type de modèle. Si votre éditeur de template (dans les Vues\Shared\EditorTemplates\Boolean.cshtml) serait:
Et puis dans le rasoir de votre écran principal, vous pourriez avoir:
Lire les réponses jusqu'à présent, j'ai commencé à me demander à propos de la façon dont le modèle objet est en cours d'initialisation. Donc, c'est plutôt bizarre, mais j'ai trouvé la réponse. J'espère que quelqu'un peut expliquer l'étrangeté. Peut-être la façon MVC initialise un objet de modèle si vous ne spécifiez pas un.
La valeur par défaut MVC Internet modèle est la suivante pour l'action Login:
Qui donne l'erreur. Changer à la suite cependant, résout le problème:
Donc cela répond à la question sur la façon de résoudre le problème, mais laisse toujours la raison en suspens. Serait-ce parce que MVC crée une instance de l'objet dans une autre façon, de dire, de réflexion, ou quelque chose?
Vous pourriez changer votre modèle de sorte qu'il accepte les valeurs null en tant que "oui"/"non"
Vous devez initialiser votre
RememberMe
bool value
dans le constructeur comme indiqué ci-dessous.Pour plus d'infromation de vérifier Valeurs par Défaut de la Table
J'espère que cela va vous aider.