Share via


Range Validator

Class Name: RangeValidator<T>

Attribute Name: RangeValidatorAttribute

Configuration tool name: Range Validator

Description

This validator checks that a value falls within a specified range. The range may be either closed, which means it has both a lower and an upper bound specified, or open, which means that it only has one bound specified.

The range validator can be used with any type that implements the IComparable interface. This includes all numeric types and strings. While it is possible, in code, to use this validator with DateTime types, the date time range validator may be a better choice because it allows you to take advantage of attributes and configuration.

Properties

The following table lists the range validator properties. The actual property names displayed in the configuration tools are listed in the table description.

Property

Description

Culture

Indicates the name of the culture that will be used to readthe lower and upper bounds from the configuration file.

LowerBound

Lower Bound - This is the low-range boundary value. It can be any IComparable type that is compatible with the target. The compiler checks this requirement if you directly invoke the validator in your code. If you use attributes or configuration, the application block attempts to convert the supplied string representation of the value to the correct type at run time.

LowerBoundType

Lower Bound Type - This property determines how to evaluate the LowerBound value. Possible values for LowerBoundType are Ignore, Inclusive, and Exclusive. The Ignore value means that the validator ignores the LowerBound value. This is the default. The Inclusive value means that the validator allows values that are equal to the LowerBound value. The Exclusive value means that the validator does not allow values that are equal to the LowerBound value.

MessageTemplate

Message Template - This property is a string containing template tokens that the validator replaces with values as it validates the target. Typically, it describes the validation result.

MessageTemplateResourceName

Template Resource Name - If you do not want to use the MessageTemplate property to hard-code a message template (perhaps for internationalization), you can use a template stored in the application resources. You must also specify a MessageTemplateResourceType value. If you include both a MessageTemplate value and a MessageTemeplateResourceName value, the MessageTemplate value takes precedence.

MessageTemplateResourceType

Template Resource Type - The resource type for the template you want to use. If you specify a MessageTemplateResourceName value, you must specify this value.

Name

Name – The name to use for this validator.

Negated

This is a Boolean property. If it is set to True, it changes the validator's behavior so that it will fail if the condition is met, rather than when it is not met. The default is False.

Tag

This property is a user-supplied string. Typically, it is used to sort or categorize validation results.

TypeName

Type Name – The fully qualified name of the type configuration element. This property cannot be edited.

UpperBound

Upper Bound - This is the upper-range boundary value. It can be any IComparable type that is compatible with the target. The compiler checks this requirement if you directly invoke the validator in your code. If you use attributes or configuration, the application block attempts to convert the supplied string representation of the value to the correct type at run time.

UpperBoundType

Upper Bound Type - This property determines how to evaluate the UpperBound value. Possible values for UpperBoundType are Ignore, Inclusive, and Exclusive. The Ignore value means that the validator ignores the UpperBound value. The Inclusive value means that the validator allows values that are equal to the UpperBound value. This is the default. The Exclusive value means that the validator does not allow values that are equal to the UpperBound value.

Message Template Tokens

If the message template contains tokens (for example, "{0}"), the validator will replace these tokens with values when the ValidationResult is created. The tokens supported by the range validator are shown in the following table.

Token

Meaning

{0}

This token represents the value of the object that is being validated. Although it can be useful to show the original value as a part of the validation message, you must be careful to avoid injection attacks by escaping any characters that can be used to attack the system that conveys the message to the user.

{1}

This token represents the key of the object that is being validated. When the validator is attached to a member of a type such as a property or a field, the key is set to the member name. When the validator is attached to an object, the key is null and the token is replaced by an empty string.

{2}

This token represents the tag that is specified on the validator instance. If no tag is supplied, the token is replaced by an empty string.

{3}

The lower bound configured for the validator instance.

{4}

The lower bound type (Inclusive, Exclusive, or Ignore) configured for the validator instance.

{5}

The upper bound configured for the validator instance.

{6}

The upper bound type (Inclusive, Exclusive, or Ignore) configured for the validator instance.

Example

The following example shows how to use the range validator with attributes to check that the Age property is between 0 and 110, inclusive.

public class Person
{
  [RangeValidator(0, RangeBoundaryType.Inclusive, 110, RangeBoundaryType.Inclusive)]
  int Age
  {
    get
    {
      return this.CalculateAge();
    }
  }
  // ...
}
'Usage
Public Class Person
  <RangeValidator(0, RangeBoundaryType.Inclusive, 110, RangeBoundaryType.Inclusive)> _
  ReadOnly Property Age() As Integer
    Get
      Return Me.CalculateAge()
    End Get
  End Property
  ' ...
End Class