2016-09-19 4 views
0

Ich habe benutzerdefinierte Validierung geschrieben, um zu verhindern, dass Benutzer die Informationen in der Datenbank speichern, wenn die Login-E-Mail-Adresse (Benutzername) bereits in der Datenbank vorhanden ist.Benutzerdefinierte Validierung funktioniert nicht richtig

<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" /> 

in cs-Datei

 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); 
     } 
    } 

Wenn wir jetzt sparen Button klicken, zeigt nach der Validierung Nachricht, um sie in der Datenbank zu speichern. Ich möchte, dass es nicht in der Datenbank gespeichert werden sollte und die benutzerdefinierte Validierung sollte wie die Validierung anderer ASP.NET funktionieren. Bitte helfen !!!

+0

Wie man Sachen Datenbank speichern kann? Geschieht es in btnSave_Click? – Andrei

+0

no ... on btnsave click Funktion, es gibt nur Speichern von Funktionen witentem – Nida

+0

Bitte relevanten Code eingeben – Andrei

Antwort

1

Sie müssen explizit überprüfen, dass die Seite gültig ist, bevor Sie mit der Verarbeitung fortfahren. Also in Ihrem Fall:

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); 
    } 
} 

Genau dies gilt für alle ASP.NET-Validierer, aber vor allem, wenn, wie in Ihrem Fall, Sie sind nicht die clientseitige Validierung verwenden, sind Sie eher dieses Problem zu begegnen. Auch wenn Ihre Validierer clientseitig aktiviert sind, sollten Sie diese Überprüfung dennoch vornehmen. Ein böswilliger Benutzer kann die clientseitige Validierung einfach umgehen und ungültige Daten übermitteln.

Sehen Sie dieses Blog für eine ausführlichere Diskussion über dieses Thema: https://www.jardinesoftware.net/2012/03/31/net-validators-dont-forget-page-isvalid/

Verwandte Themen