2012-10-19 51 views
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. 

这种说法显然是不正确的,校验类存在也是如此用正确的修饰符(公共的,静态)的方法。这是我以前使用过的代码,通常工作正常,但由于某些原因,这次无法正常工作。

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

事情我已经尝试:

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

我看来像我的代码没有被正确运行或东西,因为我不明白为什么一个明确宣布公共静态方法会导致一个错误,说它没有声明除此之外。

回答

1

好的发现它....

事实证明,这whas错误:

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

的“typeof运算(InvoiceValidator)”,同时它有正确的类型名称是不够具体和一些T4生成的代码在较近的范围内生成一个具有相同名称的类型,因此编译器将其与该类型相匹配。

我有点恼火,虽然......当然,编译器应该抛出一个模糊的类型引用的异常,而不是运行时错误。

不好的微软!

+0

这是一个棘手的问题。好侦探工作! – trailmax

1

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

+0

这是一个错字...我的坏(我错误的错误),发票日期字段说同样的事情...让我纠正它(对此感到抱歉)编辑:修正 – War