首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET CompareValidator问题

ASP.NET CompareValidator问题
EN

Stack Overflow用户
提问于 2008-11-06 07:39:21
回答 5查看 18K关注 0票数 18

我有一个带有密码和确认密码文本框的web表单。我有一个RegularExpressionValidator连接到第一个,CompareValidator连接到第二个。现在的问题是,当我在密码字段中有一些东西,而在确认密码字段中没有任何东西时,它不会显示字段不匹配的错误。只要我在确认密码字段中输入内容,它就会显示错误。我还希望允许将两个字段都保留为空。

我使用的是.NET 2.0

那会是什么呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-06 07:59:32

顺便说一句,如果您将密码框设置为ControlToValidate,并将确认密码框设置为ControlToCompare,那么它将正常工作,因为密码框中将包含某些内容,因此将运行验证。

当然,这可以允许他们提交一个带有空的密码框和填充的确认框的表单,因此在这两个框上都放置一个所需的验证器可能是一个更好的主意。

票数 18
EN

Stack Overflow用户

发布于 2009-06-26 22:39:08

我也遇到了同样的问题。使用CustomValidator而不是CompareValidator。( CustomValidator有一个名为ValidateEmptyText的有用属性,至少在ASP.NET 2.0中是CompareValidator所缺少的。)

您需要编写一个适当的ServerValidate函数以及ClientValidationFunction。javascript函数的函数签名基本上与ServerValidate函数相同: source (object),args (ServerValidateEventArgs)。

最棘手的部分是,您将需要编写自定义代码来访问"CompareTo“文本框,因为这不是CustomValidator的一部分。我的字段在FormView中;您可能需要调整代码以适应您的特定环境。在下面的代码中,"fv“是该FormView的名称。

客户端验证:

代码语言:javascript
复制
<script type="text/javascript">
<!--
  function cvPasswordRpt_Validate(source, args)
  {
    args.IsValid = (args.Value ==
                    document.getElementsByName("fv$tbPassword").item(0).value);
  }
//-->
</script>

ASPX代码:

代码语言:javascript
复制
<label>New Password:</label>
<asp:TextBox ID="tbPassword" runat="server" CssClass="stdTextField" 
             TextMode="Password" ValidationGroup="edit" />
<br />
<label>Repeat New Password:</label>
<asp:TextBox ID="tbPasswordRpt" runat="server" CssClass="stdTextField"
             TextMode="Password" ValidationGroup="edit" />
<asp:CustomValidator ID="cvPasswordRpt" runat="server" Display="Dynamic"
             EnableClientScript="true" ValidationGroup="edit"
             ControlToValidate="tbPasswordRpt" ValidateEmptyText="true"
             ErrorMessage="Your passwords do not match."
             ClientValidationFunction="cvPasswordRpt_Validate"
             OnServerValidate="cvPasswordRpt_ServerValidate" />

服务器端验证(VB.NET):

代码语言:javascript
复制
Protected Sub cvPasswordRpt_ServerValidate(ByVal sender As Object, 
                                           ByVal e As ServerValidateEventArgs)
  Dim _newPassword As String = DirectCast(fv.FindControl("tbPassword"), 
                                          TextBox).Text
  e.IsValid = e.Value.Equals(_newPassword)
End Sub
票数 6
EN

Stack Overflow用户

发布于 2008-11-06 07:45:12

您还需要使用RequiredFieldValidator。如果该字段为空,并且需要以这种方式与RequiredFieldValidator配对,则许多验证控件将通过。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/267872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档