2016-09-19 5 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/

関連する問題