2014-07-11 2 views
0

유효성 검사기가 작동하지 않습니다. 도와주세요! 사전에 감사 ...ASP.NET 필수 필드 검사기 및 비교기 유효하지 않음

if (rfvEmail.IsValid && rfvLoginName.IsValid && rfvNewPassword.IsValid 
       && rfvConfirmPassword.IsValid && cvComparePasswords.IsValid) 
      { 
       DataSet ds = new DataSet(); 
       myDal.ClearParams(); 
       myDal.AddParam("@EmailAddress", txtEmail.Text); 
       myDal.AddParam("@LoginName", txtLoginName.Text); 
       myDal.AddParam("@NewLoginPassword", txtNewPassword.Text); 
       ds = myDal.ExecuteProcedure("spResetPassword"); 

       lblPasswordMessage.Text = ds.Tables[0].Rows[0]["result"].ToString();     
      } 

소스 코드는 다음과 같습니다 : 나는 또한 버튼 내가 저장 버튼의 컨트롤을 검증하기 위해 노력하고있어

<asp:RequiredFieldValidator 
        ID="rfvConfirmPassword" 
        runat="server" 
        ErrorMessage="Password Confirmation is required!" 
        ControlToValidate="txtConfirmPassword" 
        EnableClientScript="False" 
        ForeColor="Red"></asp:RequiredFieldValidator>     

       <asp:CompareValidator 
        ID="cvComparePasswords" 
        runat="server" 
        ControlToCompare="txtNewPassword" 
        ControlToValidate="txtConfirmPassword" 
        EnableClientScript="false" 
        ForeColor="Red" 
        ErrorMessage="Passwords entered by you do not match!"> 
       </asp:CompareValidator> 

을 true로 CausesValidation를 설정 한 :

protected void btnSavePassword_Click(object sender, EventArgs e) 
    { 

     rfvEmail.Validate(); 
     rfvLoginName.Validate(); 
     rfvNewPassword.Validate(); 
     cvComparePasswords.Validate(); 
     resetPassword(); 
     } 
+0

, 즉 HTML 부분을 : 여기

내가 어떻게 할 것입니다? – entropic

+0

어디서나 Page.Validate()를 호출합니까? – Dai

+0

저장 단추에서 Page.Validate를 호출했지만 도움이되지 않습니다. – Nupur

답변

3

언뜻보기에는 틀린 방식으로 유효성 검사가 진행되는 것으로 보입니다. 더 이상 정보가 없으면 정확한 문제를 진단하기 어렵 기 때문에 몇 가지 일반적인 조언을 제공 할 것입니다.

APS.net Page Life Cycle에 익숙해야합니다. 제공된 링크에서 로드, 유효성 확인 & 포스트 백 이벤트 처리이 기록되었습니다. 유효성 검사 단계가 자동으로 발생하고 유효화 된 각 컨트롤의 유효성을 확인한 후 Page.IsValidtrue 또는 false으로 설정합니다. 즉, 각 컨트롤을 개별적으로 확인할 필요가 없습니다.

또한

그것은 중요한 확인로드 다시 게시 이벤트가을 취급하기 전에 오는 점에 유의한다. 컨트롤에 기본값을 할당하여 PageLoad 이벤트의 유효성을 망칠 수 있습니다. 이러한 이유 때문에 !Page.IsPosback은 초기 페이지로드시 컨트롤 만 설정하고 후속 포스트 백에서는 설정하지 않는 경우가 많습니다. 다시 게시 할 때까지 컨트롤을 다시 설정하지 마십시오. 이 인스턴스에서 클릭 핸들러.

유효성 검사기에 대한 정의는 무엇
//Page Load event 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostback) 
    { 
     //Set Control inital page load values etc in here 
    } 
} 


private void resetPassword() 
{ 
    //You should investigate try/catch blocks to handle database errors better 
    DataSet ds = new DataSet(); 
    myDal.ClearParams(); 
    myDal.AddParam("@EmailAddress", txtEmail.Text); 
    myDal.AddParam("@LoginName", txtLoginName.Text); 
    myDal.AddParam("@NewLoginPassword", txtNewPassword.Text); 
    ds = myDal.ExecuteProcedure("spResetPassword"); 
    lblPasswordMessage.Text = ds.Tables[0].Rows[0]["result"].ToString();   
} 

protected void btnSavePassword_Click(object sender, EventArgs e) 
{ 
    if(Page.IsValid) //The controls have already been validated now 
    { 
     resetPassword(); 

     //If you need to empty/reset fields on button click 
     //do it here. 
    } 

     //Unless you want to reset them regarless of the validity 
     //of the page. Then do it here. 
} 
+0

감사합니다. 저는 C#에 익숙하지 않고 여전히 배우고 있습니다. 도와 주실 시간을 내 주셔서 감사합니다. 정말 감사. – Nupur

+0

도와 드리겠습니다. 우리 모두는 어딘가에서 시작해야합니다. ASP.net 페이지 수명주기에 익숙해 질 수 있습니다. 그것은 시작하는 사람들을 자주 여행하는 것입니다. –

관련 문제