2

我有用户 ID 和密码字段,这两个字段都适用于 RequiredFieldValidator。就在它下面,我放置了一个 CustomValidator,当密码不匹配时,我试图从代码隐藏中进行类似的验证。

<asp:RequiredFieldValidator runat="server" ID="PWRequired"   
    ControlToValidate="PasswordTextbox"  
    Display="None"  
    ErrorMessage="<b>Required Field Missing</b><br />A password is required." />
<asp:CustomValidator runat="server" ID="PWMatch"
    ControlToValidate="PasswordTextbox"  
    Display="None"
    ErrorMessage="<b>Password is Invalid</b><br />Please enter a valid password." />
<AjaxControl:ValidatorCalloutExtender 
    runat="Server"
    ID="PWValidationExtender"
    TargetControlID="PWRequired" 
    Width="185px"
    WarningIconImageUrl="/Images/warning.gif" />
<asp:TextBox ID="PasswordTextbox" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>

(希望格式正确。我从来没有让“4个空格”的东西起作用。

然后在代码隐藏中,当密码不匹配时,我正在尝试这个:

CustomValidator myValidator = (CustomValidator)this.FindControl("PWMatch");
myValidator.Text = "<b>Password is Invalid</b><br />Please enter a valid password."; 
ValidatorCalloutExtender myValExtender = (ValidatorCalloutExtender)this.FindControl("PWValidationExtender");
myValExtender.ID = "PWValidationExtender";
myValExtender.TargetControlID="PWMatch";
myValExtender.WarningIconImageUrl = "/Images/warning.gif";
myValExtender.Width = new Unit(250);

我希望这是我想念的简单而愚蠢的事情。我花了一整天的时间试图弄清楚这一点。

在此先感谢您的帮助。

==================================================== ========================

谢谢自由落体。我已经尝试过了,并得到“不快乐”。所以,我是从一个不同的方向来的。

我已更改为 CompareValidator,如下所示:(再次希望标记有效)

<asp:CompareValidator runat="server" ID="PWCompareValidator"
    ControlToValidate="PasswordTextbox"
    Operator="Equal"
    ValueToCompare="<%# GetPassword() %>"
    Text="<b>Password is Invalid</b><br />Please enter a valid password."
    Type="String" />

它给了我一条消息,但总是评估为“假”,因为没有调用 GetPassword 方法。如果我继续努力,我想我可以让它发挥作用,但如果你看到一个快速的解决方案,我会全力以赴。再次感谢!!

4

1 回答 1

2

而不是.Text使用.ErrorMessage

所以换...

myValidator.Text = "<b>Password is Invalid</b><br />Please enter a valid password."; 

到...

myValidator.ErrorMessage = "<b>Password is Invalid</b><br />Please enter a valid password."; 

更新(由于有问题的更新)

CompareValidator旨在比较实际网站上的两个值...应该ValueToCompare是静态值,并且通过将密码放入其中,您打开了一个安全漏洞(因为您可能会将密码发送到浏览器 - 虽然我怀疑它ValueToCompare="<%# GetPassword() %>"是否会真正起作用。)

CustomValidator要求您至少提供一个处理程序...肯定是在服务器上提供一个(使用OnServerValidate属性),如果需要,在浏览器上提供一个(使用ClientValidationFunction属性)。在处理程序中,您必须根据检查结果设置参数的IsValid属性。args

(我说“绝对是服务器上的一个”,因为客户端脚本很容易绕过,所以你总是希望在服务器上有一些东西来捕捉任何尝试的人。)

目前还不是 100% 清楚你想要做什么,或者你目前已经完成了什么,所以除了我上面的内容之外,很难给你任何直接的建议。


最终更新

当您尝试检查密码时,这是我认为您需要的示例...

Password: <asp:TextBox runat="server" id="txtPassword"/>
<asp:RequiredFieldValidator runat="server" id="reqPassword"
   ControlToValidate="txtPassword" ErrorMessage="Provide Password" />
<asp:CustomValidator runat="server" id="cusPassword"
   ControlToValidator="txtPassword" ErrorMessage="Incorrect Password"
   OnServerValidate="cusPassword_ServerValidate"/>

然后在你的代码隐藏中,你需要有处理程序

protected void cusPassword_ServerValidate(object sender, ServerValidateEventArgs args)
{
  args.IsValid = (txtPassword.Text == GetPassword());
}
于 2012-11-13T14:54:16.823 回答