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

わかりました....

これは間違っていることがわかりました:

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

「typeof(InvoiceValidator)」には適切な型名がありましたが、十分に具体的であり、一部の T4 生成コードがより近いスコープで同じ名前の型を生成していたため、コンパイラはそれをその型に一致させていました。

私はこれに少し悩まされています...確かに、コンパイラは実行時エラーではなく、あいまいな型参照に対して例外をスローする必要がありました。

悪いマイクロソフト!!

于 2012-10-22T08:30:32.533 に答える