Give RequiredAttribute пользовательское сообщение

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

"The {0} field is required."

Мне нужно заменить {0} на то, что я поставляю. Я знаю, что сообщение по умолчанию похоже, но проблема в том, что я получаю такие вещи, как

"The RequiredReason field is required."

когда я хочу

"The required reason field is required".

Есть идеи, как это можно сделать?

1 ответ

Решение

Вы можете создать свой собственный RequiredAttribute, а затем переопределить метод FormatErrorMessage, чтобы использовать имя параметра или даже передать параметры, которые вы хотите отформатировать, в класс через конструктор.

Что-то вроде:

public class ParameterisedRequiredAttribute : RequiredAttribute
    {
        private string[] _replacements { get; set; }

        public ParameterisedRequiredAttribute(params string[] replacements)
        {
            _replacements = replacements;

            ErrorMessageResourceName = ErrorMessagesErrors.SpecificFieldRequired;
            ErrorMessageResourceType = typeof(ErrorMessages);
        }

        public override string FormatErrorMessage(string name)
        {
            return string.Format(ErrorMessageString, (object[])_replacements);
        }
    }
Другие вопросы по тегам