2013-03-14 3 views
7

Ma classe de modèle possède une propriété bool sans un attribut obligatoire:EditorFor/CheckBoxFor booléen ajoute attribut nécessaire données val HTML sans attribut nécessaire d'être ajouté au modèle

public class Test 
{   
    public bool TestBool1 { get; set; } 
} 

Puis à mon avis de rasoir J'utilise EditorFor (même chose se produit avec CheckBoxFor ainsi):

<div> 
    @Html.LabelFor(m => m.TestBool1) 
    @Html.EditorFor(m => m.TestBool1) 
</div> 

Il en résulte le code HTML suivant:

<div> 
    <label for="TestBool1">TestBool1</label> 
    <input class="check-box" data-val="true" data-val-required="The TestBool1 field is required." id="TestBool1" name="TestBool1" type="checkbox" value="true"> 
    <input name="TestBool1" type="hidden" value="false"> 
</div> 

D'où vient l'attribut html data-val-required?

Y at-il un moyen de l'arrêter sans utiliser @Html.CheckBox("TestBool1", Model.TestBool1) et de définir le type à bool??

+0

Je suis sûr que cela vient du fait qu'un 'bool' doit avoir une valeur réelle. Je serais prêt à parier que si c'était un bool ?, il ne rendrait pas cet attribut 'data-val-required'. –

+0

@MichaelPerrenoud La modification de 'bool?' Nécessitait un nouveau EditorTemplate pour utiliser EditorFor (CheckBoxFor ne fonctionne pas du tout) de sorte qu'il crée une case à cocher au lieu d'une liste déroulante. –

Répondre

13

de cette réponse Data annotations, why does boolean prop.IsRequired always equal true

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Ajoutez ceci à votre application_start. Par défaut MVC ajoute [Obligatoire] à des types de valeur non nulle (parce que vous ne pouvez pas convertir null dans un bool, il doit être un bool?)

vous pouvez empêcher que cela se produise, mais comme vous toujours envoyer le booléen (vrai ou faux) Je le laisse habituellement

+1

Le problème que j'ai est que sans définir 'AddImplicitRequiredAttributeForValueTypes' à faux je ne peux pas soumettre les cases à cocher non cochées comme je reçois le message" Ce champ est obligatoire. " –

+0

@Richard Dalton qui est bizarre, je travaille sur exactement la même mise en place, remarqué la validation (c'est pourquoi j'ai regardé cette autre réponse), mais je ne reçois pas d'erreurs de validation si elle n'est pas cochée valeur) – Pharabus

+0

Ahh, s'avère que ce qui causait l'échec de la validation était un javascript qui ajoutait une classe de requis aux éléments qui contenaient 'data-val-required'. Changé cela pour utiliser une classe différente et c'est bien. Accepter vous répondez comme il répond à la question de savoir comment supprimer les attributs. Merci –