我在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 > 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函数永远不会被调用。有什么建议吗?
答案 0 :(得分:1)
revAmount
或12,3
的{{1}}验证失败,因为这些字符串与正则表达式不匹配。如果您希望仅在数字没有1或2个小数位时触发验证器,则必须考虑非数字字符串是“有效”(将该情况检测到abc
,如您所示在你的问题中)。
以下正则表达式可用于cvAmount
。除了与原始表达式匹配的案例外,它还匹配非数字字符串:
revAmount
N.B。我保留了原始验证,对于像ValidationExpression="^(((?!^\d+\.?\d*$).)*|\d+(\.\d{1,2})?)$"
这样的数字(从小数点开始)失败了。您可以考虑修改错误消息以说明该情况。
答案 1 :(得分:0)
您只需在页面中的某处添加ValidationSummary控件即可。