gridview页脚中文本框的多个验证程序

时间:2016-04-14 16:51:25

标签: c# asp.net validation gridview

我在GridView页脚模板中有一个文本框。要求是文本框必须是数字,大于0并限制为2位小数。我在这个文本框中有以下三个验证器。

<asp:TemplateField HeaderText="Amount">
    <ItemTemplate>
        <asp:Label ID="Label_Amount" runat="server" Text='<%# Bind("Amount") %>'></asp:Label>
    </ItemTemplate>
    <FooterTemplate>
        <asp:TextBox ID="txtAmount" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="rfvAmount" runat="server" ErrorMessage="Amount is a required field"
            ControlToValidate="txtAmount" Text="*" ForeColor="Red" ValidationGroup="Insert">
        </asp:RequiredFieldValidator>
        <asp:CompareValidator ID="cvAmount" runat="server" ErrorMessage="Amount must be &gt; 0"
            ControlToValidate="txtAmount" ValueToCompare="0" ValidationGroup="Insert" Text="*"
            Type="Double" Operator="GreaterThan">
        </asp:CompareValidator>
        <asp:RegularExpressionValidator ID="revAmount" ControlToValidate="txtAmount" ValidationGroup="Insert" Text="*"
            runat="server" ErrorMessage="Amount limits to two decimal places" ValidationExpression="^\d+(\.\d{1,2})?$">
        </asp:RegularExpressionValidator>
    </FooterTemplate>
</asp:TemplateField>

问题是如果我放12,3,我只想看到“金额必须>​​ 0”的错误信息。但是我收到了两条错误消息。第三个常规快递验证员也被解雇了。我不知道为什么?我想知道如何解决这个问题?我可以写一份常规快递来将我的三个要求结合在一起吗?我也尝试使用CustomeValidator,但不知何故,JavaScript函数永远不会被调用。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

revAmount12,3的{​​{1}}验证失败,因为这些字符串与正则表达式不匹配。如果您希望仅在数字没有1或2个小数位时触发验证器,则必须考虑非数字字符串是“有效”(将该情况检测到abc,如您所示在你的问题中)。

以下正则表达式可用于cvAmount。除了与原始表达式匹配的案例外,它还匹配非数字字符串:

revAmount

N.B。我保留了原始验证,对于像ValidationExpression="^(((?!^\d+\.?\d*$).)*|\d+(\.\d{1,2})?)$" 这样的数字(从小数点开始)失败了。您可以考虑修改错误消息以说明该情况。

答案 1 :(得分:0)

您只需在页面中的某处添加ValidationSummary控件即可。

Please see an example here