Я добавил в помощник 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 разных источников, чтобы получить это далеко.Если бы вы могли предложить решение моей проблемы или альтернативы, я был бы благодарен.
Спасибо.
ОБНОВЛЕНИЕ С РЕШЕНИЕМ
Я использовалРешение Дарина Димитрова, хотя мне пришлось немного его подправить.Вот что я добавил.Я должен был проверить наличие атрибута metatdata, и все было хорошо.
var fieldName = ((MemberExpression)ex.Body).Member.Name;
var metadata = ModelMetadata.FromLambdaExpression(ex, html.ViewData);
if (metadata.AdditionalValues.ContainsKey("fieldName")) {
fieldName = (string)metadata.AdditionalValues["fieldName"];
}