我有一个[Range]注释,如下所示:
[Range(0, 100)]
public int AvailabilityGoal { get; set; }
我的网页如下:
<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%>
它可以正常工作,我只能输入0到100之间的值,但我也希望输入框是可选的,如果输入框为空,用户不应该得到验证错误。这与范围无关,但因为类型是整数。如果用户将其留空,则应使AvailabilityGoal = 0,但我不想强迫用户输入零。
我试过了,但它(显然)不起作用:
[Range(typeof(int?), null, "100")]
是否可以使用数据注释或其他方式解决此问题?
提前致谢。
巴比
答案 0 :(得分:22)
当给定空值时,您不必更改[Range]属性,如[Range]和其他内置DataAnnotations验证器no-op。只需将属性本身设为 int?,而不是 int 。始终自动需要不可为空的ValueType属性(如int)。
答案 1 :(得分:5)
我猜你可以覆盖Range
对象并添加此行为。
public class OptionalRange : RangeAttribute {
public override bool IsValid(object value) {
if (value == null || (int)value == 0) return true;
return base.IsValid(value);
}
}
答案 2 :(得分:0)
这看起来很不错:
[Range(Double.NaN, 20)]
public byte? Amount { get; set; }
未检查下限。如果您要检查null || >= 0
,则不是那么方便。当然,服务器端验证与客户端验证可以同时进行,在客户端验证中可以检查此值(<0)。