자신의 속성이 공정 옵션이며 아마 시작하는 가장 낮은 오버 헤드가 도출,하지만 당신은 돌아가서 [Required]
의 모든 기존의 용도를 변경해야합니다 :이 작업을해야합니다. 당신 (그리고 당신 팀의 다른 사람들)도 앞으로 올바른 사람을 사용하는 것을 기억하고 (그리고 새로운 사람들을 가르쳐야 함) 기억해야 할 것입니다.
대체 방법은 ModelMetadataProviders
및 ModelValidatorProviders
을 리소스 파일의 문자열을 반환하는 것입니다. 이렇게하면 위의 단점을 피할 수 있습니다. 또한 메시지를 다른 속성 (예 : 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));
}
여기서 전체 source, documentation이며, blog post는 사용을 설명.
네, DisplayName 정의가 이미 필요하기 때문에 (명시 적으로 전달하는 대신) 'MyRequiredAttribute' 생성자에서'DisplayName' 메타 데이터 속성을 읽어야합니다. –
아래 링크에 따르면 'name'매개 변수는 형식이 지정된 메시지에 포함될 이름입니다. //msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.formaterrormessage. aspx – Joshua