2012-09-22 11 views
21

PropertyValueRequiredキーでApp_GlobalResourcesにリソースファイルを追加し、ファイル名にDefaultModelBinder.ResourceClassKeyを変える無視MVC 4列The {0} field is requiredには影響を与えませんが変更されることはありません。 必要なフィールドごとにリソースクラスタイプとキーを設定したくありません。 何か不足していますか?MVC 4 DefaultModelBinder.ResourceClassKey

編集:

私は必要なカスタマイズの作業を保つためにダーリン・ディミトロフのコードに小さな変更を加えました:

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"; 
     } 
    } 
} 

答えて

39

これは、ASP.NET MVC 4に固有のものではないことでしたASP.NET MVC 3で同じです。DefaultModelBinder.ResourceClassKeyを使用して、必要なメッセージを設定することはできません。PropertyValueInvalidのみを設定してください。非NULL可能フィールドがないとき

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

を今すぐ:

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に登録されます:あなたが探しているものを達成する

一つの方法は、カスタムRequiredAttributeAdapterを定義することですエラーメッセージはMessages.PropertyValueRequiredから得られ、Messages.resxApp_GlobalResourcesの中で定義する必要があります。

+0

パーフェクト!私は多くの研究を行い、何も似ていないことを発見しました。どうもありがとうございました。 – Eduardo

+0

@DarinDimitrov、あなたの答えは素晴らしいです、ありがとう.... – RAM

+0

タイプバリデーションのために同様のことをすることは可能ですか?日付? – Rowan