范围注释在100和100之间?

时间:2010-05-26 13:19:12

标签: asp.net-mvc data-annotations

我有一个[Range]注释,如下所示:

[Range(0, 100)]
public int AvailabilityGoal { get; set; }

我的网页如下:

<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%>

它可以正常工作,我只能输入0到100之间的值,但我也希望输入框是可选的,如果输入框为空,用户不应该得到验证错误。这与范围无关,但因为类型是整数。如果用户将其留空,则应使AvailabilityGoal = 0,但我不想强迫用户输入零。

我试过了,但它(显然)不起作用:

[Range(typeof(int?), null, "100")]

是否可以使用数据注释或其他方式解决此问题?

提前致谢。

巴比

3 个答案:

答案 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)。