How to use Data Annotations?

Gauges

Interesting snippet from C#, ASP.NET and MVC, that uses the ValidationAttribute

Ever wanted to add validation to your MVC view, well look further for more details.

The ValidationAttribute will help you validate your model and server-side properties. As a programmer, you will need to add certain rules or attributes to the properties, such as required, string length, range and change the display property name. The example has a special attribute that limits the amount of words the user can type into a field.

You are required to inherit from ValidationAttribute, in order to use the error message and IsValid method of the attribute. Once you have those, you can set in the constructor, the message and max value. Then override the IsValid method and check the property for the amount of words. I used split and length methods to check against the max words.

If all is fine, return success, otherwise give the user the error message you set in the constructor.

The programmer will need a lot of flexibility in validating their model and view, this snippet can help you avoid writing a lot of extra client side code.

A lot of the credit goes to Scott Allen course on Building Applications with ASP.NET MVC4.

public class MaxWordsAttribute : ValidationAttribute
    {
        public MaxWordsAttribute(int maxWords)
            : base("{0} has too many words.")
        {
            _maxWords = maxWords;
        }

        protected override ValidationResult IsValid(
            object value, ValidationContext validationContext)
        {
            if (value != null)
            {
                var valueAsString = value.ToString();
                if (valueAsString.Split(' ').Length > _maxWords)
                {
                    var errorMessage = FormatErrorMessage(validationContext.DisplayName);
                    return  new ValidationResult(errorMessage);
                }
            }
            return ValidationResult.Success;
        }

        private readonly int _maxWords;
    }

    public class Reviews : IValidatableObject
    {
        [Range(1,10)]
        [Required]
        public int Rating { get; set; }

        [Required]
        [StringLength(1024)]
        public string Desc { get; set; }

        [Display(Name = "User Name")]
        [DisplayFormat(NullDisplayText = "anonymous")]

        [MaxWords(1)]
        public string UserName{ get; set; }

        public IEnumerable Validate(ValidationContext validationContext)
        {
            if (Rating < 2 && UserName.ToLower().StartsWith("cookies"))
            {
                yield return new ValidationResult("Sorry, cookies, you can't do this");
            }
        }
    }

One response to “How to use Data Annotations?”

What’s Crackin’ \ (•◡•) /

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: