2016-09-19 2 views
0

입력 된 로그인 전자 메일 주소 (사용자 이름)가 데이터베이스에 이미있는 경우 사용자가 데이터베이스의 정보를 저장할 수 없도록 사용자 지정 유효성 검사를 작성했습니다. 우리는 저장 버튼을 클릭하면 CS 파일사용자 지정 유효성 검사가 제대로 작동하지 않습니다.

 protected void ValidateUserName(object sender, ServerValidateEventArgs e) 
    { 
     SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser); 
     ds = new DataSet(); 
     bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text); 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      e.IsValid = false; 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>"; 
      btnSave.Enabled = false; 
      btnSaveclose.Enabled = false; 
     } 
     else 
     { 
      e.IsValid = true; 
      btnSave.Enabled = true; 
      btnSaveclose.Enabled = true; 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>"; 
     } 
    } 

     protected void btnSave_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (save()) 
      { 
       SucessMessage(); 
      } 
     } 
     catch (Exception ee) 
     { 
      ErrorMessage(ee.Message); 
     } 
    } 

에서

<div class="span3"> 
          <asp:TextBox ID="txtLoginEmailAddress" class="SearchTxtBox" runat="server" Text='<%# ds.Tables[0].Rows[0]["LoginEmailAddress"] %>' 
           MaxLength="50"> </asp:TextBox> 
         </div> 
         <div class="span6"> 
          <asp:RequiredFieldValidator ID="valLoginEmailAddressRequired" runat="server" CssClass="Validator" 
           ValidationGroup="save" Display="Dynamic" ControlToValidate="txtLoginEmailAddress" 
           ErrorMessage="<b>User Name is required</b>"></asp:RequiredFieldValidator> 
          <asp:CustomValidator ID="CheckAvailablity" runat="server" ValidationGroup="save" ControlToValidate="txtLoginEmailAddress" 
           OnServerValidate="ValidateUserName"></asp:CustomValidator> 

      <asp:Label ID="valDuplicatePassword" runat="server" style="color:red" Visible="False"></asp:Label></td> 
         </div> 

     <asp:Button ID="btnSave" runat="server" Text="Save" CssClass="btn btn-small " OnClick="btnSave_Click" 
           ValidationGroup="save" /> 

지금은 데이터베이스에 저장 한 후 확인 메시지가 표시됩니다. 데이터베이스에 저장해서는 안되며 사용자 정의 유효성 검사는 다른 ASP.NET의 유효성 검사와 같이 작동해야합니다. 도와주세요 !!!

+0

어떻게 자료를 데이터베이스에 저장합니까? btnSave_Click 내에서 일어나는 것입니까? – Andrei

+0

아니요 ... btnsave 클릭 기능에 저장 기능 만 있습니다. – Nida

+0

관련 코드를 게시하십시오. – Andrei

답변

1

처리를 계속하기 전에 페이지가 유효한지 명시 적으로 확인해야합니다. 귀하의 경우 그래서 :

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (this.IsValid()) //this checks that the page passed validation, including custom validation 
     { 
     if (save()) 
     { 
      SucessMessage(); 
     } 
     } 
     else 
     { 
     //any custom error message (additional to the validators themselves) should go here 
     } 
    } 
    catch (Exception ee) 
    { 
     ErrorMessage(ee.Message); 
    } 
} 

엄밀히 모든 ASP.NET이 유효성 검사기에이 적용되지만, 귀하의 경우, 당신은 클라이언트 측 유효성 검사를 사용하지 않을 때, 특히,이 문제가 발생할 가능성이 높아집니다. 유효성 검사기에서 클라이언트 측을 활성화 한 경우에도이 검사를 수행해야합니다. 악의적 인 사용자가 클라이언트 쪽 유효성 검사를 우회하여 잘못된 데이터를 전송하는 것은 쉽습니다.

이 주제에 대한 자세한 내용은이 블로그를 참조하십시오. https://www.jardinesoftware.net/2012/03/31/net-validators-dont-forget-page-isvalid/

관련 문제