从后面的代码设置asp:CustomValidator文本

时间:2012-11-13 14:31:01

标签: c# asp.net customvalidator requiredfieldvalidator

我有用户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方法。如果我继续抨击这个,我想我可以让它发挥作用,但如果你看到一个快速的解决方案,我会全力以赴。再次感谢!!

1 个答案:

答案 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());
}
相关问题