1 /* ****************************************************************************
\r
3 * Copyright (c) Microsoft Corporation. All rights reserved.
\r
5 * This software is subject to the Microsoft Public License (Ms-PL).
\r
6 * A copy of the license can be found in the license.htm file included
\r
7 * in this distribution.
\r
9 * You must not remove this notice, or any other, from this software.
\r
11 * ***************************************************************************/
\r
13 namespace System.Web.Mvc {
\r
15 using System.ComponentModel.DataAnnotations;
\r
16 using System.Globalization;
\r
17 using System.Reflection;
\r
18 using System.Web.Mvc.Resources;
\r
20 public class DataAnnotationsModelMetadata : ModelMetadata {
\r
21 private DisplayColumnAttribute _displayColumnAttribute;
\r
23 public DataAnnotationsModelMetadata(DataAnnotationsModelMetadataProvider provider, Type containerType,
\r
24 Func<object> modelAccessor, Type modelType, string propertyName,
\r
25 DisplayColumnAttribute displayColumnAttribute)
\r
26 : base(provider, containerType, modelAccessor, modelType, propertyName) {
\r
27 _displayColumnAttribute = displayColumnAttribute;
\r
30 protected override string GetSimpleDisplayText() {
\r
31 if (Model != null) {
\r
32 if (_displayColumnAttribute != null && !String.IsNullOrEmpty(_displayColumnAttribute.DisplayColumn)) {
\r
33 PropertyInfo displayColumnProperty = ModelType.GetProperty(_displayColumnAttribute.DisplayColumn, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
\r
34 ValidateDisplayColumnAttribute(_displayColumnAttribute, displayColumnProperty, ModelType);
\r
36 object simpleDisplayTextValue = displayColumnProperty.GetValue(Model, new object[0]);
\r
37 if (simpleDisplayTextValue != null) {
\r
38 return simpleDisplayTextValue.ToString();
\r
43 return base.GetSimpleDisplayText();
\r
46 private static void ValidateDisplayColumnAttribute(DisplayColumnAttribute displayColumnAttribute, PropertyInfo displayColumnProperty, Type modelType) {
\r
47 if (displayColumnProperty == null) {
\r
48 throw new InvalidOperationException(
\r
50 CultureInfo.CurrentCulture,
\r
51 MvcResources.DataAnnotationsModelMetadataProvider_UnknownProperty,
\r
52 modelType.FullName, displayColumnAttribute.DisplayColumn));
\r
54 if (displayColumnProperty.GetGetMethod() == null) {
\r
55 throw new InvalidOperationException(
\r
57 CultureInfo.CurrentCulture,
\r
58 MvcResources.DataAnnotationsModelMetadataProvider_UnreadableProperty,
\r
59 modelType.FullName, displayColumnAttribute.DisplayColumn));
\r