23

キーを使用してリソース ファイルを追加し、ファイル名を変更App_GlobalResourcesしても、MVC 4 には影響しません。文字列は変更されません。すべての必須フィールドにリソース クラス タイプとキーを設定したくありません。何か不足していますか?PropertyValueRequiredDefaultModelBinder.ResourceClassKeyThe {0} field is required

編集:

必要なカスタマイズが機能し続けるように、Darin Dimitrov のコードに小さな変更を加えました。

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    )
        : base(metadata, context, attribute)
    {
        if (attribute.ErrorMessageResourceType == null)
        {
            attribute.ErrorMessageResourceType = typeof(Messages);
        }
        if (attribute.ErrorMessageResourceName == null)
        {
            attribute.ErrorMessageResourceName = "PropertyValueRequired";
        }
    }
}
4

1 に答える 1

41

これは ASP.NET MVC 4 に固有のものではありません。ASP.NET MVC 3 でも同じDefaultModelBinder.ResourceClassKeyでしたPropertyValueInvalid。を使用して必要なメッセージを設定することはできません。.

探しているものを実現する 1 つの方法は、カスタムを定義することですRequiredAttributeAdapter

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
    public MyRequiredAttributeAdapter(
        ModelMetadata metadata,
        ControllerContext context,
        RequiredAttribute attribute
    ) : base(metadata, context, attribute)
    {
        attribute.ErrorMessageResourceType = typeof(Messages);
        attribute.ErrorMessageResourceName = "PropertyValueRequired";
    }
}

に登録しApplication_Startます。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute),
    typeof(MyRequiredAttributeAdapter)
);

null 非許容フィールドに値が割り当てられていない場合、エラー メッセージはMessages.PropertyValueRequiredwhere Messages.resxmust be defined insideから表示されApp_GlobalResourcesます。

于 2012-09-22T17:17:32.850 に答える