我有用户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空间”的工作。
然后在代码隐藏中,当PW不匹配时,我正在尝试这个:
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);
我希望我缺少一些简单而愚蠢的东西。我已经烧了一整天试图解决这个问题。
提前感谢您的帮助。
=============================================== ==========================
谢谢freefaller。我已经尝试过并且“没有快乐”。所以,我是从一个不同的方向来看它。
我已更改为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" />
它给了我一条消息,但总是评估为“false”,因为没有调用GetPassword方法。如果我继续抨击这个,我想我可以让它发挥作用,但如果你看到一个快速的解决方案,我会全力以赴。再次感谢!!
答案 0 :(得分: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());
}