Значение сообщения об ошибке проверки

#c# #entity-framework #validation

#c# #entity-framework #проверка

Вопрос:

Как выдавать пользовательские сообщения об ошибках валидатора для такого объекта?:

Квитанции превышают сумму счета на 15000

Моя собственность

 [InvoiceAmountNotExeeded(ErrorMessage = "Receipts exeeded invoice amount  of {0}")]
public int Amount {get; set; }
 

В валидаторе:

 var errorMsg = FormatErrorMessage(string.Format(validationContext.DisplayName,invoice.Amount))
 

Проблема в том, что я получаю: квитанции превышают сумму счета-фактуры.
Обратите внимание, как он записывает имя свойства вместо значения свойства. Совет?

РЕДАКТИРОВАТЬ: добавлен код

 public class InvoiceAmountNotExeededAttribute : ValidationAttribute {

        public InvoiceAmountNotExeededAttribute()
        {            
        } 

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var factId = ....;
            var db = new Entities();
            var fact = db.Invoices.Find(factId);
            var amountRecibos = ...;
            var amount = Convert.ToInt32(value);
            if (amountRecibos   amount > fact.Amount ){
                var errorMsg = FormatErrorMessage(string.Format(validationContext.DisplayName,invoice.Amount));
                return new ValidationResult(errorMsg);
            }            
            return ValidationResult.Success;
        }
    }
 

Комментарии:

1. Слишком мало информации для решения проблемы. строка. Формат будет принимать не имя свойства, а его значение, как вы хотите. Интересно, откуда берется ValidationContext.DisplayName .

2. @mr100 ValidationContext — это параметр, передаваемый методу isValid, определенному в базовом классе ValidationAttribute. Этот метод вызывается средой выполнения.

3. Ваш ответ не дал мне никакого намека. Я думаю, что без публикации дополнительного кода никто не сможет вам помочь.

4. @mr100 о, так ты проголосовал против?

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

Ответ №1:

Причина, по которой у вас такое поведение, заключается в том, что вы ссылаетесь на ValidationContext.DisplayName, для которого по умолчанию установлено значение имя свойства (в вашем случае «Сумма»). Итак, для вас строка.Формат (ValidationContext.DisplayName,счет-фактура.Сумма) возвращает просто «Сумму». Вместо этого попробуйте применить это:

 var errorMsg = FormatErrorMessage(invoice.Amount.ToString());
return new ValidationResult(errorMsg);
 

Таким образом, вы передадите в FormatErroMessage не DisplayName для вашего свойства, а вместо этого значение суммы, и FormatErrorMessage будет использовать его с шаблоном из свойства атрибута ErrorMessage. Итак, это должно дать вам то, что вы хотите.