Задать вопрос
JohnCoffey
@JohnCoffey
Учусь.

ASP.NET MVC почему в результате валидации модели ( Validator.TryValidateObject) содержатся дефолтные ErrorMessage а не наши собственные?

asp.net mvc 5 приложение.

в global.asax определен собственный адаптер для RequiredAttribute

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(CustomRequiredAttributeAdapter));


CustomRequiredAttributeAdapter:

public CustomRequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
            : base(metadata, context, attribute)
        {
            if (string.IsNullOrEmpty(attribute.ErrorMessage))
            {
                attribute.ErrorMessageResourceType = typeof(ValidationResources);
                attribute.ErrorMessageResourceName = "RequiredAttribute_ValidationError";
            }
        }


Есть App_GlobalResources/ValidationResources.resx в котором определены собственные ErrorMessages для валидатора:
5b37c3c8ea776063867147.png

Вызывается метод контроллера, в котором проверяется модель на валидность -

...
var isValid = Validator.TryValidateObject(instance, validationContext, validationResults, true);
...

Но в результатах проверки содержатся дефолтные текстовки фреймворка!
5b37c4627d70d404132572.png

При этом! Если запускать тот же метод контроллера снова и снова, уже в этом случае, результатом проверки модели будут наши собственные текстовки ошибок (как и должно быть)..
5b37c4ce4f7ce040299592.png

Почему в 1 вызове происходит такое?
Спасибо
  • Вопрос задан
  • 130 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Установлено должно быть только что-то одно - либо ErrorMessageString, либо ErrorMessageResourceName - но не вместе. Попробуйте явно установить ErrorMessage в null. Что-то типа этого:

[Required(ErrorMessage = null, ErrorMessageResourceName = “RequiredAttribute_ValidationError”, ErrorMessageResourceType = typeof(ValidationResources))]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы