我有一个这样的课程
型号:
public class Circle
{
[Required(ErrorMessage = "Diameter is required")]
public int Diameter { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Color { get; set; }
}
测试:
[TestMethod]
public void TestCircle()
{
Circle circle = new Circle();
circle.Diameter = 5;
circle.Color = "Black";
ValidationContext contex = new ValidationContext(circle, null, null);
Validator.ValidateObject(circle , contex);
}
我预计,只要Diameter或Color为空,它就会失败。但是,当字符串参数Color为null时,上述测试仅失败。为什么?我该怎么办才能验证Diameter?
答案 0 :(得分:2)
您不应将Required属性与数字属性一起使用。请改用Range属性:
RequiredAttribute属性指定表单上的字段 验证后,该字段必须包含值。验证异常 如果属性为null,则包含空字符串(“”)或 仅包含空格字符。
答案 1 :(得分:2)
RequiredAttribute仅对null(和空字符串)进行验证,但int是不可为空的,默认情况下变为0。
您可以将其设为可空(使用int?
),或者您可以使用其他类型的属性。正如DmitryG所说,你可以使用RangeAttribute,如果你有一定数量的数字可以接受,但如果没有,我认为唯一的方法就是一个CustomValidationAttribute,它有一个将值比较为零的函数。
Int32.MaxValue
。