ASP.Net阻止比较验证器和正则表达式验证器同时触发

时间:2016-02-23 04:21:56

标签: asp.net validation

我有两个这样的文本框:

<asp:TextBox ID="textBox1" runat="server" />
<asp:RegularExpressionValidator ID="regExTextBox1" runat="server" ControlToValidate="textBox1" ErrorMessage="Not a positive real number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
<asp:RequiredFieldValidator ID="reqFldTextBox1" runat="server" ControlToValidate="textBox1" ErrorMessage="Enter a number." Display="Dynamic" />

<asp:TextBox ID="textBox2" runat="server" />
<asp:RegularExpressionValidator ID="regExTextBox2" runat="server" ControlToValidate="textBox2" ErrorMessage="Not a positive real number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
<asp:RequiredFieldValidator ID="reqFldTextBox2" runat="server" ControlToValidate="textBox2" ErrorMessage="Enter a number." Display="Dynamic" />
<asp:CompareValidator id="compareValidator" runat="server" ControlToValidate="textBox2" ControlToCompare="textBox1" Type="Double" Display="Dynamic" Operator="LessThan" Text="Error." />

它是两个具有正则表达式验证器的文本框,它们将它们限制为仅允许正实数。这些工作正常。

我还希望第二个文本框中的输入小于第一个文本框中的输入。为此,我有一个比较验证器。

当用户的数字正确时,比较验证器工作正常。

当他们输入第二个正则表达式验证器失败的任何东西时,比较验证器也会同时触发。

第一个文本框中的内容,有效输入,错误输入甚至什么都没有关系。两个第二个验证器都失败了。

即使验证者应该比较双打。

对此有一个简单的解决方法吗?

我意识到这种行为是好的,因为验证器应该是无效的,但是用户会看到错误的错误消息。

我已经完成了一个涉及自定义验证器和Javascript的解决方案,如果归结为它,那么我将不得不再次这样做。但如果情况确实如此,那么使用比较验证器就没什么意义了,因为它永远不会使用正则表达式验证器。

2 个答案:

答案 0 :(得分:1)

将不同的验证组分配给正则表达式验证器并比较验证器并使用ASP.NET内置的javascript函数Page_ClientValidate()逐个检查验证。

<asp:TextBox ID="textBox1" runat="server" />
<asp:RegularExpressionValidator ID="regExTextBox1" runat="server" ControlToValidate="textBox1" ErrorMessage="Not a positive real number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" ValidationGroup="Group1" />
<asp:RequiredFieldValidator ID="reqFldTextBox1" runat="server" ControlToValidate="textBox1" ErrorMessage="Enter a number." Display="Dynamic" ValidationGroup="Group2"/>

<asp:TextBox ID="textBox2" runat="server" />
<asp:RegularExpressionValidator ID="regExTextBox2" runat="server" ControlToValidate="textBox2" ErrorMessage="Not a positive real number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" ValidationGroup="Group1" />
<asp:RequiredFieldValidator ID="reqFldTextBox2" runat="server" ControlToValidate="textBox2" ErrorMessage="Enter a number." Display="Dynamic" ValidationGroup="Group2" />
<asp:CompareValidator id="compareValidator" runat="server" ControlToValidate="textBox2" ControlToCompare="textBox1" Type="Double" Display="Dynamic" Operator="LessThan" Text="Error." ValidationGroup="Group3" />

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return Validate()" />

在Javascript中

    <script type="text/javascript">
        function Validate() {
            var isValid = false;
            isValid = Page_ClientValidate('Group1');
            if (isValid) {
                isValid = Page_ClientValidate('Group2');
            }
            if (isValid) {
                isValid = Page_ClientValidate('Group3');
            }
            return isValid;
        }
    </script>

答案 1 :(得分:0)

我认为你应该在第二个文本框中使用Custom Validator来确认正则表达式验证通过后会出现比较逻辑。您可以通过以下方式完成 -

<asp:Textbox id="textBox2" runat="server" text=""></asp:Textbox>
<asp:CustomValidator id="CustomValidator2" runat="server" 
ControlToValidate = "textBox2"
ErrorMessage = "Your Error Message"
ClientValidationFunction="validateLength" >
</asp:CustomValidator>

<script type="text/javascript">
function validateLength(oSrc, args){
 // your validation logic here
}
</script>