Проверка mvc asp.net должна быть ошибкой числа пользователя - PullRequest
10 голосов
/ 23 декабря 2010

Я новичок в asp.net и у меня проблема. Когда пользователи вставляют в редактор для десятичного поля что-то отличное от цифр, они получают сообщение об ошибке «Имя поля» не является числом. Но я не хочу, чтобы они получали это сообщение. Я хочу, чтобы они получили другое сообщение. У меня нет проблем с этим с необходимыми и диапазонными валидаторами. Есть ли для меня способ сделать это?

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

Спасибо.

Ответы [ 10 ]

13 голосов
/ 24 декабря 2010

Надеюсь, я вас понимаю, для изменения RangeValidator ErrorMessage просто инициализируйте ErrorMessage параметр:

[Range(0, 100, ErrorMessage = "Some another error message insert here!")]
[RegularExpression("\d", ErrorMessage = "!!!")]
public decimal DecimalField { get; set; }
6 голосов
/ 15 апреля 2011

Это фактический ответ:

Создать класс CustomClientDataTypeModelValidatorProvider.Скопируйте код из источников MVC.Измените метод MakeErrorString для вывода соответствующего сообщения следующим образом:

private static string MakeErrorString(string displayName)
{
    return string.Format(
        CultureInfo.CurrentCulture, 
        Core.Resources.Errors.EroareNuENr, 
        displayName);
}

Я не смог найти способ не копировать код, просто расширил его, так как он использует этот статический метод.Если кто-нибудь знает это, пожалуйста, скажите мне.

Затем в global.asax я написал это:

var cdProvider = ModelValidatorProviders.Providers.SingleOrDefault(p => p.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)));
            if(cdProvider != null)
            {
                ModelValidatorProviders.Providers.Remove(cdProvider);
                ModelValidatorProviders.Providers.Add(
                        new CustomClientDataTypeModelValidatorProvider());
            }

, чтобы поток фактически направлялся в мой класс, а не в класс вasp.net MVC dll

Я получил идею от здесь :

2 голосов
/ 03 февраля 2013

Вы можете установить ResourceClassKey класса ClientDataTypeModelValidatorProvider в качестве имени глобального ресурса, содержащего ключ FieldMustBeNumeric, чтобы заменить сообщение об ошибке проверки mvc числа вашим пользовательским сообщением.Также ключ сообщения об ошибке проверки даты: FieldMustBeDate.

ClientDataTypeModelValidatorProvider.ResourceClassKey="MyResources"; // MyResource is my global resource

Подробнее о том, как добавить файл MyResources.resx в ваш проект, см. Здесь:

Поледолжен быть числом.Как изменить это сообщение на другой язык?

2 голосов
/ 25 декабря 2010

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

В методе действия контроллера

if(ModelState.IsValid)
{
  // code
}
else
{
  if (ModelState["YourField"].Errors.Count > 0)
  {
    ModelState["YourField"].Errors.Clear(); 
    ModelState.AddModelError("YourField", "Your custom message here");
  }

  // code
}
1 голос
/ 28 февраля 2011
1 голос
/ 14 февраля 2011

Ищите решение в конце этой страницы:

http://jwwishart.wordpress.com/2010/03/22/custom-server-and-client-side-required-validator-in-mvc-2-using-jquery-validate/

Я проверил это в своем проекте MVC 3 RTM, и он хорошо работает.

1 голос
/ 28 декабря 2010

Чтобы изменить сообщение об ошибке, которое вы получите после проверки на стороне сервера, вам нужно изменить ключ «PropertyValueInvalid» в файле ресурсов и назначить имя файла ресурсов для DefaultModelBinder.ResourceClassKey. Подробности см. В этом вопросе: локализация проверки модели по умолчанию в mvc 2

0 голосов
/ 28 ноября 2018

Быстрый и простой взлом для настройки RangeValidator ErrorMessage - "Имя поля" не число "- использует RegularExpression

[Range(0.5, 1000, ErrorMessage = "Amount should be in range {1} to {2}.")]
[DataType(DataType.Currency)]
[RegularExpression(@"\d", ErrorMessage = "Amount is not valid.")]
public decimal Amount{ get; set; }
0 голосов
/ 22 февраля 2013

Похоже, что с момента ответа Para, MVC эволюционировал, и теперь ClientDataTypeModelValidatorProvider принимает свойство ResourceClassKey. Он использует сообщения FieldMustBeNumeric и FieldMustBeNumeric, указанные в вашем классе ресурсов.

0 голосов
/ 03 января 2011

Вы можете реализовать свой собственный атрибут проверки: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...