2013-03-14 8 views
7

Moja klasa modelu ma właściwość bool bez wymaganego atrybutu:EditorFor/CheckBoxFor boolean dodaje dane-Val-wymaganego atrybutu HTML bez wymaganego atrybutu dodawane są do modelowania

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

Wtedy moim zdaniem brzytwa używam EditorFor (samo dzieje się z CheckBoxFor również):

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

wynika to w następujący kod 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> 

Skąd się bierze atrybut html o wartości danych-val?

Czy istnieje sposób, aby temu zapobiec, używając opcji @Html.CheckBox("TestBool1", Model.TestBool1) i ustawiając typ na bool??

+0

Jestem prawie pewien, że pochodzi on z faktu, że 'bool' musi mieć prawdziwą wartość. Byłbym skłonny postawić zakład, gdyby to był 'bool?' Nie wyrenderowałby tego atrybutu 'data-val-required'. –

+0

@MichaelPerrenoud Zmiana tego na 'bool?' Wymagała użycia nowego EditorTemplate przy użyciu EditorFor (CheckBoxFor w ogóle nie działa), więc tworzy pole wyboru zamiast rozwijanej listy. –

Odpowiedz

13

z tej odpowiedzi Data annotations, why does boolean prop.IsRequired always equal true

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Dodaj to do aplikacji_start. Domyślnie dodaje MVC [Wymagane] do typów wartości bez pustych (ponieważ nie można przekonwertować do bool zerowy, to musi być bool?)

można zapobiec dzieje, ale jak zawsze będziesz wysyłać bool (prawda lub fałsz) Zwykle zostawiam go

+1

Problem polega na tym, że bez ustawienia "AddImplicitRequiredAttributeForValueTypes" na false nie mogę przesłać niezaznaczonych pól wyboru, gdy otrzymam komunikat "To pole jest wymagane". –

+0

@Richard Daltona, który jest dziwny, faktycznie pracuję nad dokładnie tą samą konfiguracją, zauważyłem walidację (dlatego sprawdziłem tę inną odpowiedź), ale nie dostaję błędów sprawdzania poprawności, jeśli nie zaznaczono (zakładałem, że było to nieprawdziwe value) – Pharabus

+0

Ahh, okazało się, że przyczyną niepowodzenia sprawdzania poprawności był jakiś javascript, który dodał klasę wymaganą do elementów, które zawierały 'dane-val-wymagane'. Zmieniono to na inną klasę i wszystko jest w porządku. Akceptuję odpowiedź, ponieważ odpowiada ona na pytanie, jak usunąć atrybuty. Dzięki –

Powiązane problemy