我的验证员都没有工作。请帮忙!提前谢谢......
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();
}
答案 0 :(得分:3)
乍一看,您似乎正在以错误的方式进行验证。没有进一步的信息,很难确定确切的问题,所以我会提供一些一般性的建议。
您应该熟悉APS.net Page Life Cycle。在提供的链接中,请注意加载,验证&amp; 回发事件处理上演。 验证阶段会自动发生,并会验证网页上每个经过验证的控件,并将Page.IsValid
设置为true
或false
。这意味着您不需要单独验证每个控件。
另外需要注意的是验证 加载之前的 之后 / 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.
}