Asp.net mvc 使用MVC和数据注释在客户端添加大于0的验证器的最佳方法是什么?

Asp.net mvc 使用MVC和数据注释在客户端添加大于0的验证器的最佳方法是什么?,asp.net-mvc,unobtrusive-validation,Asp.net Mvc,Unobtrusive Validation,我希望仅当某个字段中的值大于0时才允许表单提交。我想Mvc Range属性可能只允许我输入1个值来表示一个大于测试,但这并不幸运,因为它坚持最小值和最大值 您知道如何实现这一点吗?您不能存储大于基础数据类型所能容纳的数字,因此范围属性需要最大值这一事实是一件非常好的事情。记住∞在现实世界中不存在,因此以下操作应该可以正常工作: [Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")] publi

我希望仅当某个字段中的值大于0时才允许表单提交。我想Mvc Range属性可能只允许我输入1个值来表示一个大于测试,但这并不幸运,因为它坚持最小值和最大值


您知道如何实现这一点吗?

您不能存储大于基础数据类型所能容纳的数字,因此范围属性需要最大值这一事实是一件非常好的事情。记住
在现实世界中不存在,因此以下操作应该可以正常工作:

[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }

我发现这个答案是为了验证float/double的任何正值。事实证明,这些类型的“Epsilon”有一个有用的常数

表示最小的正系统。大于零的双精度值


您可以创建自己的验证程序,如下所示:

    public class RequiredGreaterThanZero : ValidationAttribute
{
    /// <summary>
    /// Designed for dropdowns to ensure that a selection is valid and not the dummy "SELECT" entry
    /// </summary>
    /// <param name="value">The integer value of the selection</param>
    /// <returns>True if value is greater than zero</returns>
    public override bool IsValid(object value)
    {
        // return true if value is a non-null number > 0, otherwise return false
        int i;
        return value != null && int.TryParse(value.ToString(), out i) && i > 0;
    }
}
    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }

我通常在下拉验证中使用此选项。请注意,由于它扩展了validationattribute,您可以使用参数自定义错误消息。

这种方法的缺点是,如果它验证了“abcd”,它将显示:
请输入一个小于或等于2147483647的值。
。您不应该能够在数字字段中输入字母。我的问题是,如果我输入99999999999999999999,它会说我的数字太小。Epsilon实际上是一个微积分函数。它是一个“limit”函数,基本上表示“可以区别于零的最小数字”,因此您可以得到.00000001的条目。我会在最小值上加上一个实际的数字。最后,我将这个答案用于另一个确实需要自定义验证器的情况。对于简单的大于零的整数验证,应该使用Darin的答案。实际上我也更喜欢他的方法,但我的同事对值的“任意设置限制”有问题。哈,这似乎很奇怪。如果有效范围小于最大整数大小,我可以理解他们的推理。这更像是小数的问题。不用看,我很确定其中没有内置min或max函数。这对我来说是最好的解决方案!
    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }