views:

72

answers:

2

Hi

I have a [Range] annotation that looks like this:

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

My webpage looks like this:

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

It works as it should, I can only enter values between 0 and 100 but I also want the input box to be optional, the user shouldn't get an validation error if the input box is empty. This has nothing to do with the range but because the type is an integer. If the user leaves it empty it should make AvailabilityGoal = 0 but I don't want to force the user to enter a zero.

I tried this but it (obviously) didn't work:

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

Is it possible to solve this with Data Annotations or in some other way?

Thanks in advance.

Bobby

+4  A: 

I guess you could override the Range object and add this behaviour.

public class OptionalRange : RangeAttribute {
    public override bool IsValid(object value) {
        if (value == null || (int)value == 0) return true;
        return base.IsValid(value);
    }
}
Robert Massa
+1  A: 

You shouldn't have to change the [Range] attribute, as [Range] and other built-in DataAnnotations validators no-op when given an empty value. Just make the property itself of type int? rather than int. Non-nullable ValueType properties (like int) are always automatically required.

Levi
This worked as I wanted, easier than I thought. Thanks.
aticatac