1 namespace System.Web.Mvc {
3 using System.ComponentModel.DataAnnotations;
4 using System.Globalization;
5 using System.Reflection;
6 using System.Web.Mvc.Resources;
8 public class DataAnnotationsModelMetadata : ModelMetadata {
9 private DisplayColumnAttribute _displayColumnAttribute;
11 public DataAnnotationsModelMetadata(DataAnnotationsModelMetadataProvider provider, Type containerType,
12 Func<object> modelAccessor, Type modelType, string propertyName,
13 DisplayColumnAttribute displayColumnAttribute)
14 : base(provider, containerType, modelAccessor, modelType, propertyName) {
15 _displayColumnAttribute = displayColumnAttribute;
18 protected override string GetSimpleDisplayText() {
20 if (_displayColumnAttribute != null && !String.IsNullOrEmpty(_displayColumnAttribute.DisplayColumn)) {
21 PropertyInfo displayColumnProperty = ModelType.GetProperty(_displayColumnAttribute.DisplayColumn, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
22 ValidateDisplayColumnAttribute(_displayColumnAttribute, displayColumnProperty, ModelType);
24 object simpleDisplayTextValue = displayColumnProperty.GetValue(Model, new object[0]);
25 if (simpleDisplayTextValue != null) {
26 return simpleDisplayTextValue.ToString();
31 return base.GetSimpleDisplayText();
34 private static void ValidateDisplayColumnAttribute(DisplayColumnAttribute displayColumnAttribute, PropertyInfo displayColumnProperty, Type modelType) {
35 if (displayColumnProperty == null) {
36 throw new InvalidOperationException(
38 CultureInfo.CurrentCulture,
39 MvcResources.DataAnnotationsModelMetadataProvider_UnknownProperty,
40 modelType.FullName, displayColumnAttribute.DisplayColumn));
42 if (displayColumnProperty.GetGetMethod() == null) {
43 throw new InvalidOperationException(
45 CultureInfo.CurrentCulture,
46 MvcResources.DataAnnotationsModelMetadataProvider_UnreadableProperty,
47 modelType.FullName, displayColumnAttribute.DisplayColumn));