自定义验证不能正常工作

本文关键字:工作 常工作 验证 不能 自定义 | 更新日期: 2023-09-27 18:07:53

我已经编写了自定义验证,如果输入的登录电子邮件地址(用户名)已经存在于数据库中,则防止用户将信息保存在数据库中。

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

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

现在,当我们点击保存按钮时,它在保存到数据库后显示验证消息。我希望它不应该保存在数据库和自定义验证应该像其他ASP一样工作。净的验证。请帮忙!!

自定义验证不能正常工作

在继续处理之前必须显式检查页面是否有效。所以在你的例子中:

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/