8

モデル オブジェクトのプロパティをRequired属性で装飾し、指定しない場合、ErrorMessage またはResourceType/Name"{0} フィールドが必要です" の補間形式で検証メッセージを取得する場合、param 0 はDisplayNameそのプロパティの属性の値です。

そのデフォルトの文字列を別のものに変更したいのですが、その一般的な性質を維持したいのです。つまり、モデルオブジェクトのすべてのプロパティを指定したくありませErrorMessageResourceType/Name。デフォルトの文字列はどこに保存され、どのように変更できますか?

4

2 に答える 2

6

独自の属性を派生させることは公正なオプションであり、おそらく開始するためのオーバーヘッドが最も低くなりますが、戻って の既存の使用をすべて変更する必要があります[Required]。あなた (およびあなたのチームの他のメンバー) は、今後も正しいものを使用することを覚えておく必要があります (そして、初心者に使用するように教える必要があります)。

別の方法として、 を置き換えてModelMetadataProvidersModelValidatorProvidersリソース ファイルから文字列を返すこともできます。これにより、上記の欠点が回避されます。MaxLengthAttributeまた、メッセージを他の属性 ( など) に置き換えたり、追加の言語をサポートしたりするための土台も築きます。

protected void Application_Start()
{
    var stringProvider = new ResourceStringProvider(Resources.LocalizedStrings.ResourceManager);
    ModelMetadataProviders.Current = new LocalizedModelMetadataProvider(stringProvider);
    ModelValidatorProviders.Providers.Clear();
    ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider(stringProvider));
}

完全なソースドキュメント、および使用方法を説明するブログ投稿を次に示します。

于 2012-04-25T14:06:41.563 に答える
6

RequiredAttribute の派生クラスを作成し、FormatErrorMessage メソッドをオーバーライドしようとしましたか? これはうまくいくはずです:

public class MyRequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public override string FormatErrorMessage(string name)
    {
        return base.FormatErrorMessage(string.Format("This is my error for {0}", name));
    }
}
于 2012-04-25T14:03:50.927 に答える