【发布时间】:2016-11-05 15:58:04
【问题描述】:
我现在正在尝试使用 .NET 在服务器端验证密码
这是我的客户端代码:
<asp:TextBox ID="PSWRD" runat="server" Width="120px"></asp:TextBox>
<span style="background-color:yellow; color:red; font-weight:bold;" title="some rules">Password Rules</span>
<asp:RequiredFieldValidator ID="VPSWRD" runat="server"
ErrorMessage="A password is required"
ControlToValidate="PSWRD">
</asp:RequiredFieldValidator>
<asp:CustomValidator ID="IPSWRDVal" runat="server"
OnServerValidate="ValidatePasswordServerSide"
ControlToValidate="PSWRD"
ErrorMessage="Please enter a *valid* password"
ValidateEmptyText="False"
></asp:CustomValidator>
我的第一个验证器工作正常。它会在适当的时候显示它的消息。
第二个给我带来了麻烦。
这是我的代码
protected void ValidatePasswordServerSide(object source, ServerValidateEventArgs args)
{
if (Regex.IsMatch(args.Value, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"))
args.IsValid = true;
else
args.IsValid = false;
}
问题是当我输入错误的值时,我没有看到第二个验证器显示错误消息。
还有一点恳求,在人们对他们的解决方案过于陌生之前,请在学校作业中注意这一点,所以他们想要一种千篇一律的方法。我知道,这很愚蠢,但规则就是规则。
【问题讨论】:
-
确实没有必要在方法名称中包含短语“ServierSide”。代码在服务器端定义。
-
你在
Regex.IsMatch调试过,看看函数是否被调用,如果是,正则表达式是否匹配。 -
我现在明白了。我之前尝试过调试它,但我的页面中有其他字段带有验证器。我将它们留空,因此它们的验证器首先会出错,而我的服务器端代码将永远不会执行。我现在觉得很傻。
-
所有验证器都有一个
Enabled(布尔值)设置。您可以将所有其他设置为“False”以阻止它们中断调试。请记住之后删除/设置为“True”。