0

MVC3 アプリケーション用のカスタム汎用検証メッセージを作成しようとして本当に迷っています。

多くのチュートリアルを読みましたが、その大部分は次のオプションのいずれかを提案しています。

  1. App_GlobalResources フォルダーを作成し、その中にカスタム リソースを配置します。global.asax を変更して、リソースの文字列名をDefaultModelBinder.ResourceClassKeyプロパティに渡します。リソースのビルド アクションを「埋め込みリソース」に変更します。

  2. プロジェクトを右クリックしてプロパティに移動し、[リソース] タブをクリックしてカスタム リソースを作成します。アクセス修飾子を「パブリック」に設定します。

最初のキーはうまくいきませんでした。リソースに次のキーがあります: DefaultModelBinder_ValueRequired、InvalidPropertyValue、PropertyValueInvalid、PropertyValueRequired 、およびモデルの必須属性に空の値を指定して送信およびフォームしようとしたときに、それらのいずれも使用されませんでした. このコードを global.asax Application_Start メソッドに配置しました。

DefaultModelBinder.ResourceClassKey = "My_Resource_Name";

2 番目の方法では、最初の方法と同じキーを持つリソースを作成しました。プロパティが無効または空の場合、デフォルトではそれらのいずれも使用されませんでした (global.asax の ResourceClassKey も変更しましたが、成功しませんでした)。しかし、モデルのデータ注釈にいくつかのパラメーターを追加すると、次のようになります。

[Required(ErrorMessageResourceType = typeof(MyResourceFile), ErrorMessageResourceName = "MyCustomKey")]

そのデータ注釈の属性が空の場合、「MyCustomKey」で定義された私のメッセージが使用されます!

しかし、これをすべての属性に手動で設定したくはありません。「{0} フィールドは必須です」などのデフォルトのエラー メッセージを置き換えたいのです。

4

1 に答える 1

0

そのメッセージは の一部ですDataAnnotations。デフォルトのメッセージは、 およびDataAnnotations assemblyの下のリソース ファイルの にコンパイルされます。ソースをダウンロードして、その部分を変更して再構築することができます。System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resourcesRequiredAttribute_ValidationError=The {0} field is required

それを変更する単純なグローバルな方法はないようです。これを試すことができます。そうしないと、すべてのフィールドに属性を追加することに行き詰まっているように見えます。または、次のようなものを使用します。

public class SomeModel
{
    [Required(ErrorMessage = "The article is required")]
    public string Article { get; set; }

    [StringLength(512, ErrorMessage = "Must be less than 512 characters.")]
    public string URL { get; set; }
}
于 2012-08-28T05:01:57.020 に答える