2011-08-03 2 views
0

를 작동하지 않는 내 모델 클래스에 dataannotation을 다음 있습니다 :DisplayFormat Dataannotation

<tr> 
     <td>@Html.LabelFor(x => x.DateOfBirth, new { @class = "lbl" }, "Date Of Birth") </td> 
     <td>@Html.TextBoxFor(x => x.DateOfBirth, new { @class = "w100 _dob" }) 
     <br>@Html.ValidationMessageFor(x => x.DateOfBirth) 
     </td> 

</tr> 

당신이 제안시겠습니까 : 내보기에 다음 사용하면

[Required(ErrorMessage = "Required")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime DateOfBirth { get; set; } 

을하고, 나는 유효성 검사 오류가 얻을 해달라고 해결책 ?

답변

4

DisplayFormat 속성은 유효성 검사와 아무 관련이 없습니다. 뷰에 표시 될 때만 값의 형식을 지정하는 데 사용됩니다. 해당 입력 필드에 사용자가 입력 한 값의 유효성을 검사하려면 사용자 정의 모델 바인더를 작성해야합니다.

<tr> 
    <td> 
     @Html.LabelFor(x => x.DateOfBirth, "Date Of Birth") 
    </td> 
    <td> 
     @Html.EditorFor(x => x.DateOfBirth) 
     <br/> 
     @Html.ValidationMessageFor(x => x.DateOfBirth) 
    </td> 
</tr> 
+0

내가 눈치 챘 :

그리고 방법에 의해 DisplayFormat 속성이 Html.EditorFor 도우미와 함께 사용되며, 당신이 사용하고있는 것입니다되는 Html.TextBoxFor 도우미와 엄격하게 적용되지 않습니다

작업중인 프로젝트의 EF POCO 중 하나에 대해'Html.TextBoxFor'를 사용하면'DisplayFormat'이 올바르게 작동합니다. 그러나 편집중인 ViewModel에서이 필드의 동일한 복사본에 똑같은'DisplayFormat'을 사용하려고하면,이 필드는 기본 디스플레이 포맷을 사용합니다. 그러나 고유 한 'DisplayName'이 수행합니다.이 'DataAnnotations'집합을 사용한다는 것을 알 수 있습니다. 즉, 'DisplayName'에 'VMTest'를 추가했습니다. 이것은 내 프로젝트에서 특정한 무엇인가의 결과 일 수 있지만, 그것은 나에게 약간의 혼란을 일으키는 흥미로운 특질이었다. –

0

LabelFor에는 CSS를 설정할 수있는 과부하가 없으므로 람다 또는 람다와 텍스트를 설정할 수 있습니다.

"new {@class ="lbl "}"부분을 제거하고 코드를 실행하면 의 유효성 검사가 실행됩니다.

편집 : 사과, 나의 초기 테스트는 EditorFor를 사용했고 컴퓨터 문화는 미국으로 설정되었으므로 괜찮 았습니다.

webconfig의 세계화 문화권을 mm \ dd \ yyyy를 사용하는 올바른 문화권으로 설정할 수 있습니다.

<globalization culture="en-us" /> 

그러나 이것은 (등 숫자, 날짜, 통화의 형식 포함) 전체 웹 사이트를 통해 적용됩니다 그래서이 제한된 경우라면, 다음이 당신의 문제에 대한 해결책이 될하지 않을 수 있습니다.

관련 문제