开发者

Custom validation error message if user puts a non-numeric string in an int field

This question has to have been asked befo开发者_运维技巧re, 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.


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


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.");
            }
        }
    }
}


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜