繁体   English   中英

数据注释只允许整数用于长数据类型属性

[英]Data annotation to allow only whole numbers for long data type properties

我有一个类如下,

    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”时出错。”

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

如何实现这一目标?

提前致谢。

您可以创建自己的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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM