ASP.NET MVC ModelMeTADATA : 필수 항목을 기반으로 isrequired를 설정하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1662442

문제

Brad Wilson은 ASP.NET MVC의 새로운 ModelMetadata에 훌륭한 블로그 시리즈를 게시했습니다.http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

그것에서 그는 모델 메타 데이터 클래스가 이제 뷰와 템플릿 헬퍼에 어떻게 노출되는지 설명합니다. 필드가 필요한 경우 양식 필드 레이블 옆에 별표를 표시하는 것입니다. 그러나 기본적으로 비판적으로 인정받을 수없는 속성에 대해서는 사실이지만 모든 무효화 할 수없는 속성에 대해 잘못된 것입니다. 문제는 문자열이 항상 무효가되므로 isrequired 속성은 항상 문자열에 대해 거짓이라는 것입니다. isrequired의 기본값을 무시하는 방법을 아는 사람이 있습니까? 또는 제가 속성을 장식 한 필수 항목 속성을 활용하는 것에 대해 생각했지만 필수 항목은 Modelmetadata 클래스를 통해 노출되지 않은 것 같습니다. 이 문제를 해결하는 방법을 아는 사람이 있습니까?

미리 감사드립니다.

도움이 되었습니까?

해결책

자신만의 Modelmetadataprovider를 만들어야합니다. 다음은 DataAnnotationsModelBinder를 사용하는 예입니다

public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
        protected override ModelMetadata CreateMetadata(Collections.Generic.IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
        {
            var _default = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
            _default.IsRequired = attributes.Where(x => x is RequiredAttribute).Count() > 0;
            return _default;
        }
}

그런 다음 Global.asax의 AppStartup에서 MyMetadatAprovider를 기본 메타 데이터 제공 업체로 연결하려면 다음을 입력하려고합니다.

ModelMetadataProviders.Current = new MyMetadataProvider();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top