4

내 모델에 [필수] 속성을 지정하지 않은 경우에도 내 기본 테마 필드가 필요하다는 클라이언트 검증이 트리거되는 이유는 무엇입니까?ASP.NET MVC 3의 DropDownListFor에서 눈에 띄지 않는 유효성 검사 문제

enter image description here

모델 :

public class Site 
{ 
    public int SiteId { get; set; } 

    [Required(ErrorMessage = "*")] 
    [LocalizedDisplayName("Title")] 
    public string Title { get; set; } 

    [Required(ErrorMessage = "*")] 
    [LocalizedDisplayName("RootDirectory")] 
    public string RootDirectory { get; set; } 

    [LocalizedDisplayName("DefaultTheme")] 
    public int DefaultThemeId { get; set; } // <-- No required attribute here 

    [Required(ErrorMessage = "*")] 
    [LocalizedDisplayName("ThemesDirectory")] 
    public string ThemesDirectory { get; set; } 

    public virtual Theme DefaultTheme { get; set; } // <-- No required attribute here 
} 

보기 :

@Html.DropDownListFor(x => x.DefaultThemeId, 
new SelectList(ViewBag.Themes, "ThemeId", "Name"), string.Empty) 

내가 ADO.NET 엔터티 데이터 모델과 엔티티 프레임 워크 4를 사용하여 내 모델에서 포항 강판에 엔티티를 매핑하고있다.

답변

7

왜냐하면 int는 암시 적 값을 가지고 있기 때문입니다. 값을 가지지 않으려면 int를 사용하여 유형을 nullable int로 변경하십시오.

+0

남자 나는 그것이 어리 석다는 것을 느꼈다 ... 그것은 그것이었다. 고마워요! – Jason

+4

정말 int로 남겨두고 싶은 경우 Global.asax에서 DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes을 false로 설정할 수 있습니다. int를 사용하는 것이 좋습니다. 하나. –

+0

감사합니다 @ 나이젤. 하루 종일 검색했습니다. –

관련 문제