What parameters does the stringlength attribute errormessage take?

14,513

Solution 1

The {0} index is the display name of property, {1} is the MaximumLength, {2} is the MinimumLength. So, your error message will be formate as "The Foo must be at least 6 characters long."

Solution 2

I haven't seen any documentation either, but the FormatErrorMessage method for the StringLengthAttribute looks like this:

public override string FormatErrorMessage(string name)
{
    EnsureLegalLengths();
    string format = ((this.MinimumLength != 0) && !base.CustomErrorMessageSet) ? DataAnnotationsResources.StringLengthAttribute_ValidationErrorIncludingMinimum : base.ErrorMessageString;
    return String.Format(CultureInfo.CurrentCulture, format, new object[] { name, MaximumLength, MinimumLength });
}

Solution 3

A longer-than-expected Google search brought me to this old topic before I could start getting some solid leads, so I'll put this here and hope it helps anyone else in the same shoes:

Inspecting the code for StringLengthAttribute that MS put up on GitHub confirms the logic residing in the FormatErrorMessage method:

// it's ok to pass in the minLength even for the error message without a {2} param since String.Format will just
// ignore extra arguments
return String.Format(CultureInfo.CurrentCulture, errorMessage, name, this.MaximumLength, this.MinimumLength);

Thus '0', '1', and '2' corresponds to 'name' (of Property), 'MaximumLength', and 'MinimumLength' accordingly.

I bet the same method can be applied to all other validation attributes to check their formatting parameters accordingly; I was not able to find any other documentation for this infomation otherwise.

Share:
14,513
Anders E. Andersen
Author by

Anders E. Andersen

Programmer, mainly in the Delphi and C# languages. Projects include web front-ends and REST back-ends for ERP systems as well as in house tooling and support applications. Experienced 1st and 2nd level supporter on ERP systems used in property management.

Updated on June 02, 2022

Comments

  • Anders E. Andersen
    Anders E. Andersen almost 2 years

    In the MVC4 template one of the data annotation attributes used is stringlength.

    For example:

    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    

    What parameters {0}, {1}, {2} (more?) are legal?

    Edit: To be more specific, I can see from the example and trial and error what the possibilities are, but I would like to see some hard documentation.

    I can't find anything about this in the StringLengthAttribute documentation.

  • Anders E. Andersen
    Anders E. Andersen over 11 years
    Yes, well I guess what I am really asking is, how can I know this, apart from trial and error. Is it implemented in the StringLengthAttribute class itself in the FormatErrorMessage method? Is this documented?
  • Shimmy Weitzhandler
    Shimmy Weitzhandler over 8 years
    What if MinimumLength wasn't specified? And if what if it's the only property that was set while MaximumLength is zero?
  • Alexander Mihailov
    Alexander Mihailov about 5 years
    This should be the accepted answer. The current one does not explain where the information is coming from.
  • AjimOthy
    AjimOthy almost 4 years
    No idea if it was true many years ago when this was answered, but the docs currently state this in remarks. docs.microsoft.com/en-us/dotnet/api/…