2013-03-14 9 views
7

mia classe del modello ha una proprietà bool senza un attributo richiesto:EditorFor/CheckBoxFor booleano aggiunge attributo data-val-richiesta per HTML senza attributo richiesto che viene aggiunto per modellare

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

Poi a mio avviso rasoio sto usando EditorFor (stessa cosa accade con CheckBoxFor pure):

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

il risultato è il seguente codice HTML:

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

Da dove proviene l'attributo html data-val-required?

C'è un modo per impedirlo senza usare @Html.CheckBox("TestBool1", Model.TestBool1) e impostare il tipo su bool??

+0

Sono quasi sicuro che proviene dal fatto che un 'bool' deve avere un valore reale. Sarei disposto a scommettere se fosse un 'bool?' Non renderebbe l'attributo 'data-val-required'. –

+0

@MichaelPerrenoud Cambiandolo a 'bool?' Richiesto un nuovo EditorTemplate per usare EditorFor (CheckBoxFor non funziona affatto) in modo che venga creata una casella di controllo invece di un elenco a discesa. –

risposta

13

da questa risposta Data annotations, why does boolean prop.IsRequired always equal true

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Aggiungi questo al tuo application_start. Per impostazione predefinita MVC aggiunge [Required] per i tipi di valore non nullable (perché non è possibile convertire nullo in un bool, deve essere un bool?)

si può evitare che ciò accada, ma come si invierà sempre il bool (vero o falso) Io di solito lo lascio

+1

Il problema che sto riscontrando è che senza impostare 'AddImplicitRequiredAttributeForValueTypes' su false Non posso inviare checkbox non selezionate quando ottengo il messaggio" Questo campo è richiesto. " –

+0

@Richard Dalton che è strano, in realtà sto lavorando sullo stesso set up, ho notato la convalida (che è il motivo per cui ho guardato l'altra risposta) ma non ottengo errori di validazione se deselezionata (ho pensato che fosse falso valore) – Pharabus

+0

Ah, si scopre che cosa ha causato il fallimento della convalida era qualche javascript che ha aggiunto una classe di richiesta agli elementi che conteneva 'data-val-required'. Modificato per usare una classe diversa e va bene. Accettandoti rispondi mentre risponde alla domanda su come rimuovere gli attributi. Grazie –

Problemi correlati