Asp.net 在.Net中分叉验证错误消息

Asp.net 在.Net中分叉验证错误消息,asp.net,validation,Asp.net,Validation,在ASP.Net中,如何将验证消息限制为仅一条 规则:用户必须输入一个介于0和1000之间的数字。 当前[不期望的]行为: 用户类型1001:验证程序说“请输入1000以下的非负数” 用户类型-1:验证程序说“请输入1000以下的非负数” 期望的行为: 用户类型1001:验证程序说“请输入1000以下的数字” 用户类型-1:验证器说“请输入一个非负数” 换句话说,我如何使用两个asp:RangeValidator,它们的不允许值相交,但只打开所需的值?我不想在服务器上处理ServerValida

在ASP.Net中,如何将验证消息限制为仅一条

规则:用户必须输入一个介于0和1000之间的数字。

当前[不期望的]行为:

用户类型1001:验证程序说“请输入1000以下的非负数”
用户类型-1:验证程序说“请输入1000以下的非负数”

期望的行为:

用户类型1001:验证程序说“请输入1000以下的数字”
用户类型-1:验证器说“请输入一个非负数”

换句话说,我如何使用两个asp:RangeValidator,它们的不允许值相交,但只打开所需的值?我不想在服务器上处理ServerValidate事件


如果没有客户端代码,它是否可行?

您的“期望”行为可能会有些恼人:

  • 用户输入1001
  • 应用程序告诉用户“请输入1000以下的数字”
  • 用户认为这很公平,然后输入-1(您会同意它是“1000以下的数字”)
  • 应用程序然后告诉用户“请输入一个非负数”
  • 你为什么不先提一下!?,用户自言自语
我要问的是:告诉用户实际规则的现有行为有什么问题?

您可以使用a检查值是否小于零,使用
RangeValidator检查值是否在-2147483647和1000之间

<asp:CompareValidator Id="IsNotNegativeValidator"
                      ControlToValidate="TextBox1"
                      ValueToCompare="-1"
                      Operator="GreaterThan"
                      Type="Integer"
                      Text="Please put in a non-negative number"
                      runat="server"/>

<asp:RangeValidator   Id="IsLessThanOneThousandValidator"
                      ControlToValidate="TextBox1"
                      MinimumValue="-2147483647"
                      MaximumValue="1000"
                      Type="Integer"
                      Text="Please put in a number beneath 1000"
                      runat="server"/>


(在这种特殊情况下,一个带有消息“请输入一个介于0和1000之间的数字”的
RangeValidator确实会减少用户的沮丧情绪。)

我发现最好的方法是专门使用RegularExpressionValidator。您可以使用适当的正则表达式验证任何内容。

谢谢-我认为asp:CompareValidator仅用于比较控件,我不知道ValueToCompare属性。假设用户输入一个非整数,因此,除了第三条验证消息指定用户必须输入整数之外,还触发了这两条不相关的消息。关于非整数的好问题-我认为没有自定义验证器或正则表达式验证器就没有办法做到这一点。这是创建一个单一验证器的另一个很好的理由,该验证器包含一条全面的消息,说明了管理该值的所有规则。我无法想象一个用户很难弄清楚他们违反了“请输入一个介于0和1000之间的数字”的哪一部分?我希望它说“请输入一个数字”。

现在它说(在实现asp:CompareValidator之后):


价格应该是数字的
价格应该是非负的
输入一个较小的数字

,因为从技术上讲,它无法通过三次验证,但只有最上面的一次验证具有相关性。