ASP.. NET必填字段验证器和比较验证器不起作用
本文关键字:验证 比较 不起作用 字段 NET ASP | 更新日期: 2023-09-27 18:12:20
我的验证器都不工作。请帮助!提前感谢……
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();
}
源代码如下所示:我还将按钮
上的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();
}
乍一看,您似乎正在以错误的方式进行验证。如果没有进一步的信息,很难诊断出确切的问题,因此我将提供一些一般性的建议。
您应该熟悉asp.net页面生命周期。在提供的链接中,请注意Load,Validation &回发事件处理 stage。Validation阶段自动发生,将验证页面上每个已验证的控件,并将Page.IsValid
设置为true
或false
。这意味着您不需要单独验证每个控件。
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.
}