컨트롤의 이름을 ASP.NET MVC3 형식으로 표시하기 위해 MetadataType
을 할당하는 EF4에서 생성 된 부분 클래스가 있는데 예상대로 작동합니다.DisplayAttribute 이름을 가져올 수 없습니다.
동일한 DisplayAttribute
을 각 속성에 할당하여 표시된 Name
값을 다른 용도로 다시 가져오고 싶습니다. 내 클래스는 다음과 같습니다
using Domain.Metadata;
namespace Domain
{
[MetadataType(typeof(ClassAMetada))]
public partial class ClassA
{}
}
namespace Domain.Metadata
{
public class ClassAMetada
{
[Display(Name = "Property 1 Description", Order = 1)]
public Boolean Property1;
[Display(Name = "Property 2 Description", Order = 2)]
public Boolean Property2;
}
}
나는 이미 3 개 게시물을보고 시도했다 제시된 솔루션 :
- How to get DisplayAttribute of a property by Reflection?
- C# Buddy Classes/Meta Data and Reflection
- Get [DisplayName] attribute of a property in strongly-typed way
하지만 없음 그들 중 속성을 검색 할 수 있습니다 Name
va 루; 속성이 없으므로 null
이므로 빈 문자열 (세 번째 질문) 또는 속성 이름 (첫 번째 질문)을 반환합니다. 두 번째 질문은 속성을 발견하기 위해 약간 변경되었지만 결과는 빈 문자열이기도합니다.
제발 도와 줄 수 있어요? 고마워요!
편집 : 여기
내가 속성 값 (별도 둘 다 일을) retreive을 사용하고 2 방법에 대한 코드입니다. 둘 다 꽤 비슷합니다. 첫 번째는 속성의 이름을 가진 문자열을 사용하고 다른 하나는 람바 식을 사용합니다.
private static string GetDisplayName(Type dataType, string fieldName)
{
DisplayAttribute attr;
attr = (DisplayAttribute)dataType.GetProperty(fieldName).GetCustomAttributes(typeof(DisplayAttribute), true).SingleOrDefault();
if (attr == null)
{
MetadataTypeAttribute metadataType = (MetadataTypeAttribute)dataType.GetCustomAttributes(typeof(MetadataTypeAttribute), true).FirstOrDefault();
if (metadataType != null)
{
var property = metadataType.MetadataClassType.GetProperty(fieldName);
if (property != null)
{
attr = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), true).SingleOrDefault();
}
}
}
return (attr != null) ? attr.Name : String.Empty;
}
private static string GetPropertyName<T>(Expression<Func<T>> expression)
{
MemberExpression propertyExpression = (MemberExpression)expression.Body;
MemberInfo propertyMember = propertyExpression.Member;
Object[] displayAttributes = propertyMember.GetCustomAttributes(typeof(DisplayAttribute), true);
if (displayAttributes != null && displayAttributes.Length == 1)
return ((DisplayAttribute)displayAttributes[0]).Name;
return propertyMember.Name;
}
내가 내 대답을 삭제. 'Name' 속성을 검색하는 방법을 보여주는 코드를 게시 할 수 있습니까? –
@Sergi Papaseit : ok, no problem;) 속성 값을 검색하는 데 사용하는 메서드 코드로 내 질문을 업데이트했습니다. 도와 주셔서 감사합니다! – jmpcm