Существует класс ModelMetaData
, который имеет статический метод с именем FromLambdaExpression
. Если вы позвоните ему и передадите свою собственность вместе с вашим ViewData
, он вернет экземпляр ModelMetaData
. Этот класс имеет свойство DisplayName
, которое должно дать вам то, что вам нужно. Вы также можете получить другие метаданные из этого объекта.
Например, вы можете создать пустой объект ViewDataDictionary
для получения этой информации. Он может быть пустым, потому что ModelMetaData
на самом деле не использует экземпляр, ему просто нужен универсальный класс для определения используемого типа.
//This would typically be just your view model data.
ViewDataDictionary<IEnumerable<Person>> data = new ViewDataDictionary<IEnumerable<Person>>();
ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.First().Name, data);
string displayName = result.DisplayName;
Вызов метода First()
не прерывается, даже если у вас нет действительного объекта Person
, потому что лямбда просто пытается найти свойство, о котором вы хотите получить метаданные. Точно так же вы можете сделать это для одного Person
объекта:
//This would typically be just your view model data.
ViewDataDictionary<Person> data = new ViewDataDictionary<Person>();
ModelMetadata result = ModelMetadata.FromLambdaExpression(p => p.Name, data);
Вы можете значительно убрать это с помощью вспомогательного метода или метода расширения, но это должно поставить вас на правильный путь.