#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. Итак, это должно дать вам то, что вы хотите.