首页 > 解决方案 > 数据注释只允许整数用于长数据类型属性

问题描述

我有一个课程如下,

    public class MyClass
    {
        [Required]
        public string Name { get; set; }

        [Required]
        [Range(1, Int64.MaxValue)]
        public long Volume{ get; set; }
    }

并在控制器动作中使用了上述类。

[HttpPost]
public void testAction(, MyClass myClass)
{
var state = ModelState.IsValid;
}

为控制器操作传递 json 输入

输入类型 1:{

"Name":"SomeName",
"Volume":12.2

}

没有模态验证失败,并且输入数据映射 Volume 属性为 12。

输入类型 2:{

"Name":"SomeName",
"Volume": "12.2"

}

模型验证错误,“将值“12.2”转换为类型“System.Int64”时出错。”

我想要相同的模型验证失败错误,即使输入提供为“卷”:12.2

如何做到这一点?

提前致谢。

标签: c#asp.net-mvcmodel-validation

解决方案


您可以创建自己的ValidationAttribute.

(inputVal % 1) == 0确保输入值不是浮点数。

public class RangeCustomerAttribute : ValidationAttribute
{
    public long MaxValue { get; set; }
    public long MinValue { get; set; }

    public RangeCustomerAttribute(long minVal, long maxVal)
    {
        MaxValue = maxVal;
        MinValue = minVal;
    }
    public override bool IsValid(object value)
    {
        int inputVal;
        if (value == null)
            return false;

        if (int.TryParse(value.ToString(), out inputVal))
        {

            if (inputVal >= MinValue && inputVal <= MaxValue)
                return (inputVal % 1) == 0;

        }
        return false;
    }
}

使用喜欢

public class MyClass
{
    [Required]
    public string Name { get; set; }

    [Required]
    [RangeCustomer(1, Int64.MaxValue)]
    public long Volume{ get; set; }
}

推荐阅读