2011-07-01 5 views
13

ASP.net MVC 3 인터넷 응용 프로그램 템플릿은 다음과 같은 모델을 포함 기본값 : 계정에서모델의 DataTypeAttribute가 MVC 3에서 유효성 검사를 수행합니까?

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

/는 이메일 주소를 요청하는 조치를 등록을하지만,이 필드에 아무것도 입력 할 수 있습니다 보인다과 그것을 받아 들일 것입니다.

DataType (DataType.EmailAddress)이 실제로 유효성 검사를 트리거합니까? 그렇지 않은 것 같습니다. 유형을 검증하지 않으면 그 목적은 무엇입니까?

+0

동일한 문제가있어 해결책을 찾았습니까? – J4N

답변

0

기본 템플릿은 적절한 Validate.js 스크립트를 마스터 페이지에 추가하지 않습니다. 데이터 주석은 자바 스크립트가 클라이언트 측 유효성 검사를 수행하기 위해 읽는 HTML 만 출력합니다.

서버 동작을 확인하려면 Model.IsValid를 수행해야합니다.

+1

기본 템플릿이 모든 템플릿을 추가합니다. 그게 내가 말하려고하는거야. 기본 인터넷 응용 프로그램은 클라이언트 측 스크립트를 추가합니다 ... Model.IsValid를 컨트롤러 작업에 추가하고 STILL이 유효성을 검사하지 않습니다. – Travis

0

해당 유효성 검사기를 사용할 수 없으며 one found on the ASP.net site과 비슷한 내용을 작성했습니다. 아마도 [EmailAddress] 주석은 MVC3 Future에서 사용할 수 있습니다.

3

현재 MVC3 릴리스의 DataType 특성과 관련된 유효성 검사가 없습니다. 이 속성에서 파생 된 새 속성은 MVC Futures에 표시되고이 유효성 검사 프로세스를 추가합니다. (예를 들어 EmailAdressAttribute)

10

내가 알고있는 한, DataType 특성은 서식 지정에 사용되지만 @Html.EditorFor(model => model.Field)을 사용할 때만 사용됩니다.

모델 필드, cshtml에서 예 및 결과 HTML :

모델 분야 :

[Required] 
[DataType(DataType.Text)] 
[Display(Name = "Name")] 
public string Name { get; set; } 

[Required] 
[DataType(DataType.Password)] 
[Display(Name = "Password")] 
public string Password { get; set; } 

[Required] 
[DataType(DataType.MultilineText)] 
[Display(Name = "Description")] 
public string Desc { get; set; } 

Cshtml :

<div class="form-section"> 
    @Html.LabelFor(x => x.Name) 
    @Html.EditorFor(x => x.Name) 
</div> 

<div class="form-section"> 
    @Html.LabelFor(x => x.Password) 
    @Html.EditorFor(x => x.Password) 
</div> 

<div class="form-section"> 
    @Html.LabelFor(x => x.Desc) 
    @Html.EditorFor(x => x.Desc) 
</div> 

결과 HTML : 내가 아는

<div class="form-section"> 
    <label for="Name">Name</label> 
    <input class="text-box single-line" id="Name" name="Name" type="text" value=""> 
</div> 
<div class="form-section"> 
    <label for="Password">Password</label> 
    <input class="text-box single-line password" id="Password" name="Password" type="password" value=""> 
</div> 
<div class="form-section"> 
    <label for="Desc">Description</label> 
    <textarea class="text-box multi-line" id="Desc" name="Desc"></textarea> 
</div> 

그것은 오래되었다. 게시,하지만 어쩌면 나는이 길을 와서 다른 사람을 위해 상황에 빛을 할 수

편집 :

에만 클라이언트 측하지만이 부착 일부 확인 할 수있다. 실제 검증을 위해 이러한 속성에 의존하지 마십시오, 이것은 항상 (클라이언트 측에만 사용자 경험을위한) editorfor()

0

데이터 형식 속성이 템플릿 뷰에서 사용하는 서버 측을 수행해야합니다 검증 속성이 아닙니다. 템플릿으로 사용됩니다. 전의. DataType.Email에 html 5 전자 메일 태그를 사용할 수 있습니다. 제이크가 자세히 설명해 줬어.

0

데이터 형식 속성은 사용시

관련 문제