【问题标题】:ASP.NET Required Field Validator and Compare Validator not workingASP.NET 必填字段验证器和比较验证器不起作用
【发布时间】:2014-07-11 03:24:03
【问题描述】:

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

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

【问题讨论】:

  • 验证器的定义是什么,即 HTML 部分?
  • 你在任何地方都给Page.Validate()打电话吗?
  • 我尝试在 Save Button 中调用 Page.Validate 但没有帮助。
  • C# 的初始块在哪里调用?此外,您不需要在页面回发时发生的每个控件上调用Validate() 方法。一般来说,你应该在点击处理程序if(Page.IsValid){resetPassword();}中使用类似下面的东西
  • 我在 SavePassword 按钮点击中调用它。

标签: c# asp.net validation requiredfieldvalidator


【解决方案1】:

乍一看,您似乎以错误的方式进行验证。如果没有进一步的信息,很难诊断出确切的问题,所以我将提供一些一般性建议。

您应该熟悉APS.net Page Life Cycle。在提供的链接中,记下 LoadValidationPostback 事件处理Validation 阶段自动发生,将验证页面上每个已验证的控件并将Page.IsValid 设置为truefalse。这意味着您无需单独验证每个控件。

还需要注意的是,验证之后 加载之前 回发事件处理。通过为控件分配默认值,可能会弄乱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.
}

【讨论】:

  • 感谢它的帮助!我是 C# 新手,仍在学习。感谢您抽出时间来帮助我。我真的很感激。
  • 很高兴为您提供帮助。我们都必须从某个地方开始。 ASP.net 页面生命周期可能需要一些时间来适应。这经常让那些刚开始的人绊倒。
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多