【问题标题】:CompareValidator without RequiredFieldValidator?没有RequiredFieldValidator 的CompareValidator?
【发布时间】:2015-08-03 11:18:40
【问题描述】:

所以我一直在寻找,似乎找不到类似的问题。

基本上,如果没有RequiredFieldValidator,似乎使用CompareValidator 是行不通的。

<div class="control-group">
                <label class="control-label" for="PositionName">
                    Password:</label>
                <div class="controls">
                    <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
                    <%--<asp:RequiredFieldValidator ID="rvPassword" runat="server" ControlToValidate="txtPassword"
                        ErrorMessage="Please Enter Password" SetFocusOnError="True" ValidationGroup="1"
                        CssClass="error"></asp:RequiredFieldValidator>--%>
                </div>
            </div>
            <div class="control-group">
                <label class="control-label" for="PositionName">
                    Confirm Password:</label>
                <div class="controls">
                    <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="reqConPass" runat="server" ControlToValidate="txtConfirmPassword"
                        ErrorMessage="Please Enter Confirm Password" SetFocusOnError="True" ValidationGroup="1"
                        CssClass="error"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="compPassword" runat="server" ControlToValidate="txtConfirmPassword"
                        ControlToCompare="txtPassword" ErrorMessage="Password Mismatch" SetFocusOnError="True"
                        ValidationGroup="1" CssClass="error"></asp:CompareValidator>
                </div>
            </div>

基本上,您可以看到我已将 RequiredFieldValidator 注释掉以表示通过和确认通过。当我这样做时,我只能在txtPassword textbox 中提交一个值,而在txtConfirmPassword textbox 中没有任何值。

如果我取消注释 RequiredFieldValidators,那么它会按应有的方式进行比较。

如果有帮助,我需要这样做的原因是因为我无法解密密码并用他们当前的密码自动填充文本框。因此,每当编辑用户时,他们每次都需要输入带有RequiredFieldValidator 的新密码。

所以我的解决方案是去掉RequiredFieldValidator,只检查文本是否为空或为空,如果是,则不要更新密码,但如果不是,则更新用户而不更新密码。

我希望这是有道理的,如果有人可以提供帮助,我将不胜感激。

如果您需要更多信息,请询问。

再次感谢!

【问题讨论】:

  • 是的,这是设计使然。您可以在服务器端进行比较检查或使用自定义验证器。
  • 这对我来说非常有效。我直接复制了您给定的代码,即使没有密码所需的验证器,我也得到了“密码不匹配”——尽管它确实在我的测试中执行了回发。
  • 嗯,有趣的是它对你有用啊,但我似乎仍然不喜欢它。哦,好吧,我想我会接受 Henk Holterman 的建议并检查服务器端。谢谢大家!
  • 附加测试说明:我什至在txtConfirmPassword 上评论了RequiredFieldValidator,它起作用了。所以我不确定是什么干扰了你的。
  • 哦,好吧,所以发生的事情是我粘贴的代码没有为确认密码文本框注释掉 requiredfieldvalidator。这确实使比较工作,但是它不会让我在不输入密码的情况下提交,这是我正在尝试解决的问题。

标签: c# asp.net comparevalidator


【解决方案1】:

请参阅此代码 sn-p,在此密码中,我首先使用了正则表达式验证器,一旦密码有效,我便启用了比较验证器。

 <script>
        function Validate() {            
            if (document.getElementById('<%=txtPassword.ClientID %>').value != "")
                ValidatorEnable(document.getElementById('<%=ConfirmPasswordRequired.ClientID %>'), true);
            else
                ValidatorEnable(document.getElementById('<%=ConfirmPasswordRequired.ClientID %>'), false);
        }
    </script>
	<p>
              Password
                <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
               
                <asp:RegularExpressionValidator ID="PasswordRegularExpression" runat="server"
                    ErrorMessage="*Password must be at least 8 characters long and include at least one Special Character, one Number, and one Capital letter."
                    ValidationGroup="ValidationGroup1" ValidationExpression="^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).*$"
                    ControlToValidate="txtPassword" >
                </asp:RegularExpressionValidator>
            </p>
            <p>
				Confirm Password:
                <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server" ControlToValidate="txtConfirmPassword"
                    ErrorMessage="*Confirm Password is required."
                    Enabled="false" ValidationGroup="ValidationGroup1"></asp:RequiredFieldValidator>
                <asp:CompareValidator ID="NewPasswordCompare" runat="server" ControlToCompare="txtPassword"
                    ControlToValidate="txtConfirmPassword"  ErrorMessage="*Confirm Password must match with the Password."
                    ValidationGroup="ValidationGroup1"></asp:CompareValidator>
            </p>
            <p>
                <asp:Button ID="Button1" runat="server" Text="Save" ValidationGroup="ValidationGroup1"
                    OnClick="Button1_Click" OnClientClick="Validate();" />
            </p>

【讨论】:

    【解决方案2】:

    这是一个想法,我最终也使用了这个解决方案:

    如何设置比较验证器以验证密码文本框并将其与确认进行比较。 这样,比较验证器只有在密码文本框中有值时才会触发。

    <div class="control-group">
        <label class="control-label" for="PositionName">Password:</label>
        <div class="controls">
            <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"/>      
        </div>
    </div>
    <div class="control-group">
        <label class="control-label" for="PositionName">Confirm Password:</label>
        <div class="controls">
            <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"/>       
            <asp:CompareValidator ID="compPassword" runat="server" ControlToValidate="txtPassword"
                          ControlToCompare="txtConfirmPassword" ErrorMessage="Password Mismatch" SetFocusOnError="True"
                          ValidationGroup="1" CssClass="error"/>
        </div>
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多