我正在编写一个自定义ModelMetadataProvider,它扩展了默认的DataAnnotationsModelMetadataProvider。不幸的是,我遇到了一个问题:ModelMetadata.Container 属性总是空。根据ModelMetadata Class的msdn描述,当模型表示属性时,容器属性不应为null:

但是,当重写GetMetadataForProperty方法时,在调用基本实现容器属性之后,总是以null的形式返回:

protected override ModelMetadata GetMetadataForProperty(
Func<object> modelAccessor,
Type containerType,
PropertyDescriptor propertyDescriptor)
{
ModelMetadata metadata = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
// metadata.Container always null here
}另一方面,当从ModelMetadata访问ViewData时,Container属性按预期填充:

因此,我有几个有关这个问题的问题:
GetMetadataForProperty返回空的预期行为还是一个bug?ModelMetadata.Container中填充ModelMetadataProvider属性吗?发布于 2015-01-17 09:52:44
元数据是从最内部的属性中创建的,因此在调用GetMetadataForProperty时还没有创建容器模型的元数据(在实现IMetadatAware时同样适用于IMetadatAware)。您可以从ViewData访问它的原因是创建所有元数据的过程已经完成。
https://stackoverflow.com/questions/27998083
复制相似问题