我的代码如下:
foreach (var PI in ObjType.GetProperties())
{
var metaData = ModelMetadataProviders.Current.GetMetadataForType(null, PI.GetType());
string DispName = metaData.DisplayName
}
ObjType
是EF6架构第一个实体的类型,DisplayName
被添加为Metadata
类。上述错误可能是因为PI.GetType()
返回PropertyInfo
的类型。但我真的无法弄清楚如何获得房产本身。
我使用以下方式查看各种示例:
ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
但是,就我而言,我没有使用任何Lambda Expression。我只需要构建属性列表'DisplayName
并传递它。
答案 0 :(得分:0)
但我真的无法弄清楚如何获得房产。
您想要PropertyInfo.PropertyType,因此请将PI.GetType()
更改为PI.PropertyType
。
答案 1 :(得分:0)
我不知道这是否会对你有所帮助,但这就是我从它附加的对象中获取MetaDataClassType的方法。
具有MetadataType的示例类:
[MetadataType(typeof(TheMetaDataYouWantTheTypeFrom))]
public class ObjectYouWantMetaDataTypeFrom
{
public string Username { get; set; }
public string Name { get; set; }
}
public class TheMetaDataYouWantTheTypeFrom
{
[Required(ErrorMessage = "You must enter a username.")]
public object Username { get; set; }
[Required(ErrorMessage = "You must enter a name.")]
public object Name { get; set; }
}
获取MetadataClassType的代码
Type ObjectType = ObjectYouWantMetaDataTypeFrom.GetType();
object ObjectMetaData = ObjectType.GetCustomAttributes(typeof(MetadataTypeAttribute), true).FirstOrDefault();
MetadataTypeAttribute MetaData = ObjectMetaData as MetadataTypeAttribute;
if (MetaData == null)
{ throw new NullReferenceException(); }
Type metadataClassType = MetaData.MetadataClassType;