验证ErrorMessage值

时间:2014-06-28 03:07:29

标签: c# entity-framework validation

如何为这样的实体发出自定义验证程序错误消息?:

收据的发票金额为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 个答案:

答案 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属性属性中的模式。所以这应该给你你想要的东西。