ASP.NET必需字段验证程序和比较验证程序不起作用

时间:2014-07-11 03:24:04

标签: c# asp.net validation requiredfieldvalidator

我的验证员都没有工作。请帮忙!提前谢谢......

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

源代码如下所示: 我还在Button

上将CausesValidation设置为true
 <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>

我正在尝试验证“保存”按钮中的控件:

 protected void btnSavePassword_Click(object sender, EventArgs e)
    {

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

1 个答案:

答案 0 :(得分:3)

乍一看,您似乎正在以错误的方式进行验证。没有进一步的信息,很难确定确切的问题,所以我会提供一些一般性的建议。

您应该熟悉APS.net Page Life Cycle。在提供的链接中,请注意加载验证&amp; 回发事件处理上演。 验证阶段会自动发生,并会验证网页上每个经过验证的控件,并将Page.IsValid设置为truefalse。这意味着您不需要单独验证每个控件。

另外需要注意的是验证 加载之前的 之后 / strong>即可。通过为控件分配默认值,可能会使PageLoad事件中的验证陷入混乱。因此!Page.IsPosback通常仅用于设置初始页面加载的控件而不是后续回发。在回发后,请不要重置您的控件,直到您完成它们为止。在这种情况下,您的Click处理程序。

我将如何做到这一点:

//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.
}