2012-04-15 4 views
1

다음 모델을 사용하여 사용자 입력을 제어하고 등록합니다. 그러나 동일한 비밀번호를 입력하고 버튼을 누르면 확인 비밀번호에 대한 메시지가 잘못되었습니다.MVC3의 비밀번호 확인 문제

다른 페이지에서 작동하기 때문에 모델에 대해 정확하다고 확신합니다. 이 경우 RegisterModelSecondEventFrontEndViewModel의 구성원입니다.

그래서 내가 설명하면 [Compare("RegisterModel.Password", ErrorMessage = "The password and confirmation password do not match.")] 그것은 작동하지만 확인이 필요하지 않습니다!

실마리를 고치는 방법을 알려주세요. jquery.validate :

public class EventFrontEndViewModel 
    { 
     public Page CurrentPage { set; get; } 

     public List<Event> Events { set; get; } 

     public List<Event> SubscribedEvents { set; get; } 

     public RegisterModelSecond RegisterModel { set; get; } 

     public EventFrontEndViewModel() 
     { 
      CurrentPage = new Page(); 
      Events = new List<Event>(); 
      RegisterModel = new RegisterModelSecond(); 
      SubscribedEvents = new List<Event>(); 
     } 
    } 

등록 모델

public class RegisterModelSecond 
    { 
     [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; } 

     [Required] 
     [DataType(DataType.Password)] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 
    } 

및 HTML은

<div class="editor-label"> 
             @Html.LabelFor(m => m.RegisterModel.Password) 
            </div> 
            <div class="editor-field"> 
             @Html.PasswordFor(m => m.RegisterModel.Password) 
             @Html.ValidationMessageFor(m => m.RegisterModel.Password) 
            </div> 
            <div class="clear"> 
            </div> 
            <div class="editor-label"> 
             @Html.LabelFor(m => m.RegisterModel.ConfirmPassword) 
            </div> 
            <div class="editor-field"> 
             @Html.PasswordFor(m => m.RegisterModel.ConfirmPassword) 
             @Html.ValidationMessageFor(m => m.RegisterModel.ConfirmPassword) 
            </div> 
            <div class="clear"> 
            </div> 

답변

2

나는이 클라이언트 측 유효성 검사 스크립트의 버그 여기 MVC 3 Client-Side Compare Validation

정답을 발견했다. 겸손한 .js

라인에서 16,

것은 ~ 284이를 찾을 수 있습니다 : 이것에

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0]; 

변경을 :

element = $(options.form).find(":input[name='" + fullOtherName + "']")[0]; 

이름 속성은 작은 따옴표를 필요로한다.


MIN 버전을 사용하려면 추가하고 싶습니다. 거기서도 변경해야합니다.

+1

감사합니다 ... 완전히 미친 버그 ... – kape123

+1

와우 .. 내 하루를 구해 .. 감사합니다. –