Custom validation error message if user puts a non

2019-04-26 16:51发布

问题:

This question has to have been asked before, but I think the search terms are too generic for me to find the answer I'm looking for, so I'll ask it again.

I have a model with an int property, and a range annotation.

If the user enters something other than an int, the validation message responds with The value '<bad data>' is not valid for '<property name>'... which is great, but I want to provide a bit more feedback, i.e., Expecting an integer value in this field..

Since this validation fails before the other validators take a look, I don't know how (or if it's possible) to override the default validator message for this.

What are my options?

per request, I am posting the code, but there's not a lot to it:

[Range(0,65535, ErrorMessage="Port must be between 0 and 65535.")] 
public int Port { get; set; }

There is validation that occurs before it reaches the RangeAttribute. I want to replace the default message with one of my own choosing.

回答1:

If you're using standard annotations, you should be able to override the error message with something like this:

[MyAnnotation(...., ErrorMessage = "My error message")]
public int myInt { get; set; }

Or do you actually want to append to the default error message instead of replacing it (not clear in question)?

Update: Misread -- suggest this as the answer: How to change the ErrorMessage for int model validation in ASP.NET MVC? or better yet How to change 'data-val-number' message validation in MVC while it is generated by @Html helper



回答2:

You can also inherit IValidatableObject in your model class. You can write down your required logic in the Validate method. Please find sample code below.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication1.Models
{
    public class Alok : IValidatableObject
    {
        [Display(Name = "Property1")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Property1 is required.")]
        public int Property1 { get; set; }

        [Display(Name = "Property2")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Property2 is required.")]
        public int Property2 { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (Property1 < Property2)
            {
                yield return new ValidationResult("Property 1 can't be less than Property 2.");
            }
        }
    }
}


回答3:

read this question. In the link that the OP suggest you will find the way to replace the deafult error string that use the framework, while in the answer you will find a linnk to the other resources in case you want to change all of them. Look also here. Hope it helps