2012-10-19 46 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