Не удается получить значение настраиваемого атрибута в помощнике HTML MVC3

Я расширил помощник HTML с помощью метода, которому требуется значение атрибута из свойства модели. Итак, я определил настраиваемый атрибут как таковой.

    public class ChangeLogFieldAttribute : Attribute {
        public string FieldName { get; set; }
    }

Это используется в моей модели.

    [Display(Name = "Style")]
    [ChangeLogField(FieldName = "styleid")]
    public string Style { get; set; }

В моем вспомогательном методе у меня есть следующий код для получения значения FieldName моего атрибута, если атрибут используется для свойства.

        var itemName = ((MemberExpression)ex.Body).Member.Name;

        var containerType = html.ViewData.ModelMetadata.ContainerType;
        var attribute = ((ChangeLogFieldAttribute[])containerType.GetProperty(html.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(typeof(ChangeLogFieldAttribute), false)).FirstOrDefault();
        if (attribute != null) {
            itemName = attribute.FieldName;
        }

Однако, когда я дойду до этого кода, я получаю исключение, потому что containerType имеет значение null.

Я не уверен, правильно ли я делаю что-либо из этого, но я использовал около 4 различных источников, чтобы зайти так далеко. Если бы вы могли предложить решение моей проблемы или альтернативу, я был бы признателен.

Спасибо.

ОБНОВЛЕНИЕ РЕШЕНИЯ

Я использовал решение Дарина Димитрова, хотя мне пришлось его немного подправить. Вот что я добавил. Мне пришлось проверить наличие метатданных атрибута, и все было хорошо.

        var fieldName = ((MemberExpression)ex.Body).Member.Name;

        var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData);
        if (metadata.AdditionalValues.ContainsKey("fieldName")) { 
            fieldName = (string)metadata.AdditionalValues["fieldName"];
        }
5
задан Jeff Reddy 28 October 2011 в 15:00
поделиться