1

我有一个带有以下属性定义的发票对象...

[CustomValidation(typeof(InvoiceValidator), "ValidateInvoiceDate")]
 public DateTime InvoiceDate { get; set; }

当我在我的 MVC 应用程序中进行回发时,我会得到一个发票对象,然后执行此操作...

if(ModelState.IsValid)
{
   SaveInvoice(invoice);
}

我的验证器看起来像这样......

public static class InvoiceValidator
{
   public static ValidationResult ValidateInvoiceDate(DateTime invoiceDate, ValidationContext context)
   {
       // some validation code (omitted)
   }
}

我的问题似乎是让大坝工作,因为目前它只是抛出一个异常:

The CustomValidationAttribute method 'ValidateInvoiceDate' does not exist in type 'InvoiceValidator' or is not public and static.

这种说法显然是不对的,验证器类存在,具有正确修饰符(public、static)的方法也存在。这是我之前使用过的代码,通常可以正常工作,但由于某种原因这次无法正常工作。

任何想法还有什么可能导致这个异常被抛出?

我尝试过的事情:

干净的解决方案和完全重建(编译时没有错误)。将方法/验证器类和重构属性重命名为新值,然后重新编译头在此处询问

在我看来,我的代码没有正确运行或其他什么,因为我不明白为什么明确声明的公共静态方法会导致错误,说除此之外没有声明它。

4

2 回答 2

1

ValidateCurrencyCode是你的提示。您是否使用InvoiceValidator来验证您的CurrencyCode领域?似乎您确实在其他领域使用它,但没有在您的验证器类中实现该方法。

于 2012-10-19T16:03:33.657 回答
1

好的,找到了....

事实证明这是错误的:

[CustomValidation(typeof(InvoiceValidator), "ValidateInvoiceDate")]

“typeof(InvoiceValidator)”虽然它具有正确的类型名称,但它足够具体,并且一些 T4 生成的代码在更近的范围内生成具有相同名称的类型,因此编译器将其与该类型匹配。

不过,我对此有点恼火……当然,编译器应该为不明确的类型引用而不是运行时错误抛出异常。

坏微软!!

于 2012-10-22T08:30:32.533 回答