5

エラー メッセージに値を渡すことは可能ですか。私はこのようなことを試しました:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => String.Format(ValidationErrors.TooLong, "255"));

ValidationErrors は、以下を含む私のリソース ファイルです。

長すぎます {0} 文字未満にしてください。

これ:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => ValidationErrors.TooLong);

正常に動作します。

4

1 に答える 1

6

現在リリースされている FluentValidation (v2) のバージョンでは、ローカライズされたメッセージを使用する場合、これはサポートされていません。

WithLocalizedMessage の最初の引数は、常にリソース プロパティを識別する必要があります。その中に任意のコードを配置することはできません (string.format の呼び出しなど)。

ローカライズされていないメッセージを使用している場合は、次のようにできます。

RuleFor(x => x.Property).Length(1,255).WithMessage("Max number of chars is {0}", "255");

FluentValidation v3 の時点でローカライズされたエラー メッセージでこのアプローチを使用することもできますが、まだバイナリ リリースがないため、これを利用したい場合は、プロジェクト サイトからソースを取得してビルドできます。

別の方法として、数値プレースホルダーを使用する代わりに、FV のビルトイン サポートをデフォルト バリデーターの名前付きプレースホルダーに使用できます。したがって、.Length(1, 255) を使用している場合は、エラー メッセージ内で {0} の代わりに {MaxLength} を使用できます。

{MaxLength} 文字未満で使用してください。

...そして、FV はこれを最大値として入力した値に自動的に置き換えます。ドキュメントには、すべての名前付きプレースホルダーの完全なリストがあります。

于 2011-06-24T12:24:52.313 に答える