2011-05-08 7 views
1

그래서 난 내 데이터베이스에 다음 테이블이 :ASP.NET MVC 유효성 검사

Account [Id (PK, int), Name(string), Password(string)] 

은 내가 ADO.NET 엔터티 데이터 모델을 사용 (.edmx)와 ADO.NET자가 Entity Generator를 추적하여 모델을 자동으로 생성합니다.

사용자가 내 웹 사이트에서 새 계정을 만들 수있는 계정/만들기 페이지를 만들고 싶습니다. 분명히, 나는 사용자 입력을 검증하기 위해 password 필드와 confirmPassword 필드를 갖고 싶다. 나는 이것을 해내 검증 모델을 다음과 같은 한 : 내 데이터베이스가 ConfirmPassword 열이 없기 때문에

namespace MD5DatabaseTest.Models 
{ 
    [MetadataType(typeof(AccountMetaData))] 
    public partial class Account {} 
    public class AccountMetaData 
    { 
     public int Id { get; set; } 

     [Required(ErrorMessage = "Please type a username")] 
     public String Name{ get; set; } 

     [Required(ErrorMessage = "Please type a password")] 
     public String Password { get; set; } 

     [Required(ErrorMessage = "Please confirm your password")] 
     [Compare("Password", ErrorMessage = "Passwords do not match")] 
     public String ConfirmPassword{ get; set; } 
    } 
} 

내 Create.cshtml 코드는 분명히 여기에 실패

<div class="editor-label"> 
      Confirm your password 
     </div> 
     <div class="editor-field"> 
      @Html.Password("ConfirmPassword") 
      @Html.ValidationMessageFor(model => model.ConfirmPassword) 
     </div> 

사용하여이 유효성을 검사 할 수 있습니다 MVC 3 데이터 주석? 아니면 (클라이언트 측) 유효성 검사를 위해 별도의 Jscript 함수를 작성해야합니까?

+0

비교 속성에는 오타가 있습니다. "Paswoord" –

+0

수정 됨. 왜냐하면 여기서 사람들이 더 잘 이해할 수 있도록하기 위해 네덜란드어에서 영어로 코드를 번역했기 때문입니다. – Matthias

답변

1

모델! = ViewModel.

보기에서 모델 개체를 직접 사용하면 안됩니다. 계정 생성 페이지 (질문에있는 것과 같은 ConfirmPassword 속성 포함)에 대한 ViewModel을 만들고 Create 컨트롤러 함수에서 ViewModel의 값을 ConfirmPassword 속성이없는 도메인 모델로 복사합니다) 그것을 저장하십시오.

내 데이터베이스가 ConfirmPassword 열이 없기 때문에 내 Create.cshtml 코드는 분명 그 코드가 실패 할 이유가 없다

실패합니다.

ViewModel에 대한 유효성 검사 속성이있는 경우 해당 특성은 존중되며 데이터베이스의 필드와 연결될 필요가 없습니다.

사실 MVC는 모든 문제에 대한 분리입니다. 뷰는 모델에 대해서만 데이터베이스에 대해 알 필요는 없습니다. 그리고 모델은 데이터베이스에 대해 알고 있지만 데이터베이스에 1 대 1 매핑이 있어야한다는 것을 의미하지는 않습니다.

제 설명이 약간 명확하길 바랍니다. 그렇지 않다면 알려주세요. 나는 정교하게 노력할 것입니다.

+0

좋은데. 고마워, 내가 MVC에 상당히 새로운 사람이기 때문에 나는 그것을 몰랐다. 이것은 실제로 작동합니다 ^^ – Matthias

0

Model! = ViewModel로 모델로 사용하려는 경우에도 시도해 볼 수 있습니다.

"ConfirmPassword"속성에 대한 속성입니다. 보기에 ConfirmPassword 블록을 수동으로 입력 할 수 있습니다. 예쁘지는 않지만 예상대로 작동합니다.

관련 문제