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

jaf*_*ffa 77 asp.net-mvc unobtrusive-validation

如果某个字段中的值大于0,我希望能够只允许表单提交.我想可能Mvc Range属性允许我只输入1个值来表示只有大于测试,但是没有运气,因为它坚持最小和最大值.

任何想法如何实现这一目标?

Dar*_*rov 209

您不能存储大于基础数据类型所能容纳的数字,因此Range属性需要最大值这一事实是一件非常好的事情.请记住,?在现实世界中不存在,因此以下应该有效:

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

  • 这种方法的缺点是,如果它验证“abcd”,它将显示:“请输入小于或等于 2147483647 的值”。 (2认同)

Joh*_*ord 19

您可以像这样创建自己的验证器:

    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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将该文件包含在您的模型中,并将其用作这样的属性:

    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }
Run Code Online (Sandbox Code Playgroud)

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


Phi*_*hil 8

我发现这个答案试图验证浮点/双精度的任何正值.事实证明这些类型对'Epsilon'有一个有用的常量

表示大于零的最小正System.Double值.

    [Required]
    [Range(double.Epsilon, double.MaxValue)]
    public double Length { get; set; }
Run Code Online (Sandbox Code Playgroud)