DataAnnotations StringLength Attribute MVC - without max value

58,937

Solution 1

Is there a way to only specify only a minimum length? Perhaps another attribute i can use?

Using the standard data annotation, No. You must specify the MaximumLength. Only the other parameters are optional.

In such a case, I'd recommend something like this:

[StringLength(int.MaxValue, MinimumLength = 7)]

You can also use a Regex (regular expression) attribute like this one:

[RegularExpression(@"^(?:.*[a-z]){7,}$", ErrorMessage = "String length must be greater than or equal 7 characters.")]

More on this here: Password Strength Validation with Regular Expressions

Solution 2

There is the [MinLength(7)] attribute as well for this purpose.

Source: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute(v=vs.110).aspx

Solution 3

Have you thought of removing the data annotations and add an Html attribute to the Html.TextBoxFor element in your View?

Should look something like:

@Html.TextBoxFor(model => model.Full_Name, new { htmlAttributes = new { @class = "form-control", @minlength = "10" } })

or

@Html.TextBoxFor(model => model.Full_Name, new { @class = "form-control",  @minlength = "10" } })

10 being the minimum length you choose.

I like to add html attributes to my view as I can quickly see the impact it has. without messing with your database and does not require you to run migrations and database update if your using migrations (code first approach).

just remember that when you change the EditorFor to TextBoxFor you will loose your styling but should be an easy fix, again you can just add the styles to your view or add styling to your CSS file.

Hope this helps :)

Share:
58,937
Mr-DC
Author by

Mr-DC

Updated on June 12, 2020

Comments

  • Mr-DC
    Mr-DC almost 4 years

    I am using Data Annotations for Model validation in MVC4 and am currently using the StringLengthAttribute however i do NOT want to specify a maximum value (currently set at 50) but DO want to specify a minimum string length value.

    Is there a way to only specify only a minimum length? Perhaps another attribute i can use?

    My current code is:

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Confirm New Password")]
        [StringLength(50, MinimumLength = 7)]
        [CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
        public string ConfirmNewPassword { get; set; }