如何为这样的实体发出自定义验证程序错误消息?:
收据的发票金额为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;
}
}
答案 0 :(得分:1)
您有此行为的原因是因为您引用validationContext.DisplayName,默认情况下将其设置为属性名称(在您的情况下为“Amount”)。所以对于你string.Format(validationContext.DisplayName,invoice.Amount)只返回“金额”。而不是尝试应用此:
var errorMsg = FormatErrorMessage(invoice.Amount.ToString());
return new ValidationResult(errorMsg);
这样,您将为您的属性传递FormatErroMessage而不是DisplayName,而是传递Amount值,而FormatErrorMessage将使用ErrorMessage属性属性中的模式。所以这应该给你你想要的东西。