Mercurial > altnet-hispano
diff Agendas/trunk/src/Agendas.Web/CustomModelMetadataProvider/DataAnnotationAndConventionModelMetadataProvider.cs @ 85:8a4135f019dd
cambio de nombre de una clase
author | nelopauselli |
---|---|
date | Wed, 25 May 2011 01:20:24 -0300 |
parents | |
children | c57ca21064f2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/CustomModelMetadataProvider/DataAnnotationAndConventionModelMetadataProvider.cs Wed May 25 01:20:24 2011 -0300 @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Web.Mvc; + +namespace AltNetHispano.Agendas.Web.CustomModelMetadataProvider +{ + public class DataAnnotationAndConventionModelMetadataProvider : DataAnnotationsModelMetadataProvider + { + private readonly IResolverByConvention _resolverByConvention; + private List<Attribute> _attributeList; + + public DataAnnotationAndConventionModelMetadataProvider(IResolverByConvention resolverByConvention) + { + _resolverByConvention = resolverByConvention; + } + + protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) + { + _attributeList = new List<Attribute>(attributes); + + var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); + + if (propertyName != null) + { + if (string.IsNullOrWhiteSpace(modelMetadata.DisplayName)) + modelMetadata.DisplayName = _resolverByConvention.GetDisplayName(propertyName); + + if (string.IsNullOrWhiteSpace(modelMetadata.Description)) + modelMetadata.Description = _resolverByConvention.GetDescription(propertyName); + + var validators = _attributeList.OfType<ValidationAttribute>(); + foreach (var validator in validators) + { + if (string.IsNullOrWhiteSpace(validator.ErrorMessage) && + string.IsNullOrWhiteSpace(validator.ErrorMessageResourceName)) + { + var resourceName = propertyName + validator.GetType().Name; + if (resourceName.EndsWith("Attribute")) + resourceName = resourceName.Substring(0, resourceName.Length - 9); + var resourceType = validator.ErrorMessageResourceType ?? _resolverByConvention.ResourceType; + var prop = resourceType.GetProperty(resourceName); + if (prop != null) + { + validator.ErrorMessageResourceType = resourceType; + validator.ErrorMessageResourceName = resourceName; + } + } + } + } + + return modelMetadata; + } + } +} \ No newline at end of file