85
|
1 using System;
|
|
2 using System.Collections.Generic;
|
|
3 using System.ComponentModel.DataAnnotations;
|
|
4 using System.Linq;
|
|
5 using System.Web.Mvc;
|
|
6
|
|
7 namespace AltNetHispano.Agendas.Web.CustomModelMetadataProvider
|
|
8 {
|
|
9 public class DataAnnotationAndConventionModelMetadataProvider : DataAnnotationsModelMetadataProvider
|
|
10 {
|
|
11 private readonly IResolverByConvention _resolverByConvention;
|
|
12 private List<Attribute> _attributeList;
|
|
13
|
|
14 public DataAnnotationAndConventionModelMetadataProvider(IResolverByConvention resolverByConvention)
|
|
15 {
|
|
16 _resolverByConvention = resolverByConvention;
|
|
17 }
|
|
18
|
|
19 protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
|
|
20 {
|
|
21 _attributeList = new List<Attribute>(attributes);
|
|
22
|
|
23 var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
|
|
24
|
|
25 if (propertyName != null)
|
|
26 {
|
|
27 if (string.IsNullOrWhiteSpace(modelMetadata.DisplayName))
|
|
28 modelMetadata.DisplayName = _resolverByConvention.GetDisplayName(propertyName);
|
|
29
|
|
30 if (string.IsNullOrWhiteSpace(modelMetadata.Description))
|
|
31 modelMetadata.Description = _resolverByConvention.GetDescription(propertyName);
|
|
32
|
|
33 var validators = _attributeList.OfType<ValidationAttribute>();
|
|
34 foreach (var validator in validators)
|
|
35 {
|
|
36 if (string.IsNullOrWhiteSpace(validator.ErrorMessage) &&
|
|
37 string.IsNullOrWhiteSpace(validator.ErrorMessageResourceName))
|
|
38 {
|
|
39 var resourceName = propertyName + validator.GetType().Name;
|
|
40 if (resourceName.EndsWith("Attribute"))
|
|
41 resourceName = resourceName.Substring(0, resourceName.Length - 9);
|
|
42 var resourceType = validator.ErrorMessageResourceType ?? _resolverByConvention.ResourceType;
|
|
43 var prop = resourceType.GetProperty(resourceName);
|
|
44 if (prop != null)
|
|
45 {
|
|
46 validator.ErrorMessageResourceType = resourceType;
|
|
47 validator.ErrorMessageResourceName = resourceName;
|
|
48 }
|
|
49 }
|
|
50 }
|
|
51 }
|
|
52
|
|
53 return modelMetadata;
|
|
54 }
|
|
55 }
|
|
56 } |