Пользовательское сообщение об ошибке проверки, если пользователь помещает нечисловую строку в поле int - PullRequest
8 голосов
/ 08 сентября 2011

Этот вопрос должен был быть задан ранее, но я думаю, что условия поиска слишком общие, чтобы я мог найти ответ, который я ищу, поэтому я задам его снова.

У меня есть модель со свойством int и аннотацией диапазона.

Если пользователь вводит что-то отличное от int, на сообщение о проверке выдается The value '<bad data>' is not valid for '<property name>' ... что здорово, но я хочу предоставить немного больше отзывов, т. Е. Expecting an integer value in this field..

Поскольку эта проверка не проходит до того, как другие валидаторы взглянут, я не знаю, как (или если это возможно) переопределить сообщение валидатора по умолчанию для этого.

Какие у меня варианты?

за запрос, я выкладываю код, но там немногое:

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

Существует проверка, которая происходит до того, как она достигает атрибута RangeAttribute. Я хочу заменить сообщение по умолчанию одним из моих собственных.

Ответы [ 3 ]

5 голосов
/ 08 сентября 2011

Если вы используете стандартные аннотации, вы сможете переопределить сообщение об ошибке примерно так:

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

Или вы действительно хотите добавить сообщение об ошибке по умолчанию вместо его замены (неясно, о чем идет речь)?

Обновление: неверное прочтение - предложите это как ответ: Как изменить ErrorMessage для проверки модели int в ASP.NET MVC? или еще лучше Как изменить 'data-val-number 'проверка сообщения в MVC при его создании @Html helper

4 голосов
/ 09 сентября 2011

Вы также можете наследовать IValidatableObject в своем классе модели. Вы можете записать необходимую логику в методе Validate. Пожалуйста, найдите образец кода ниже.

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.");
            }
        }
    }
}
1 голос
/ 08 сентября 2011

читать этот вопрос .В ссылке, предложенной ОП, вы найдете способ заменить строку ошибки по умолчанию, в которой используется инфраструктура, а в ответе вы найдете ссылку на другие ресурсы на случай, если вы захотите изменить их все.Смотрите также здесь .Надеюсь, это поможет

...