我正在编写一个自定义ModelMetadataProvider
,它扩展了默认DataAnnotationsModelMetadataProvider
。不幸的是我遇到了一个问题:
ModelMetadata.Container
属性始终为null 。根据{{1}}的msdn描述,当model表示属性时,container属性不应为null:
但是当覆盖ModelMetadata Class
方法时,在调用基本实现之后,Container属性总是返回为null:
GetMetadataForProperty
另一方面,当从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
属性会按预期填充:
因此,我有几个与此问题相关的问题:
ModelMetadata.Container从Container
返回空或者是一个错误是预期的行为吗?
有没有办法在ModelMetadataProvider中填充GetMetadataForProperty
属性?
当ModelMetadata.Container属性实际获取内容时?
答案 0 :(得分:2)
元数据是从最里面的属性创建的,因此在调用GetMetadataForProperty
时尚未创建容器模型的元数据(当您实现时{同样适用于OnMetadataCreated
{1}})。您可以从IMetadatAware
访问它的原因是创建所有元数据的过程已经完成。