C# 验证错误消息值

C# 验证错误消息值,c#,entity-framework,validation,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,invoi

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

收据超出发票金额15000

我的财产

[InvoiceAmountNotExeeded(ErrorMessage = "Receipts exeeded invoice amount  of {0}")]
public int Amount {get; set; }
在验证程序中:

var errorMsg = FormatErrorMessage(string.Format(validationContext.DisplayName,invoice.Amount))
问题是我收到的收据超过了发票金额。 请注意它是如何写入属性名而不是属性值的。建议

编辑:添加代码


出现这种行为的原因是因为您引用了validationContext.DisplayName,默认情况下该名称设置为property name(在本例中为“Amount”)。所以对于您来说,string.Format(validationContext.DisplayName,invoice.Amount)只返回“Amount”。请尝试应用以下方法,而不是此方法:

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

通过这种方式,您将传递给FormatErrorMessage,而不是属性的DisplayName,而是Amount值,FormatErrorMessage将与ErrorMessage属性中的模式一起使用它。因此,这应该能满足您的需求。

信息太少,无法解决问题。Format将不采用属性名称,而是采用所需的属性值。有趣的是validationContext.DisplayName来自何处。@mr100 validationContext是传递给ValidationAttribute基类中定义的IsValid方法的参数。该方法由运行时调用。您的回答没有给我任何提示。如果不发布更多的代码,我想没有人能够帮助你。@mr100哦,那么你投了反对票?是的,因为在我看来,这个问题没有提供足够的信息来解决问题,这是投反对票的原因。请提供更多信息,我将取消投票。
var errorMsg = FormatErrorMessage(invoice.Amount.ToString());
return new ValidationResult(errorMsg);