ModelMetadata.Container属性为null

时间:2015-01-17 09:29:27

标签: c# asp.net asp.net-mvc modelmetadata modelmetadataprovider

我正在编写一个自定义ModelMetadataProvider,它扩展了默认DataAnnotationsModelMetadataProvider。不幸的是我遇到了一个问题: ModelMetadata.Container属性始终为null 。根据{{​​1}}的msdn描述,当model表示属性时,container属性不应为null:

enter image description here

但是当覆盖ModelMetadata Class方法时,在调用基本实现之后,Container属性总是返回为null:

enter image description here

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属性会按预期填充:

enter image description here

因此,我有几个与此问题相关的问题:

  1. ModelMetadata.Container从Container返回空或者是一个错误是预期的行为吗?

  2. 有没有办法在ModelMetadataProvider中填充GetMetadataForProperty属性?

  3. 当ModelMetadata.Container属性实际获取内容时?

1 个答案:

答案 0 :(得分:2)

元数据是从最里面的属性创建的,因此在调用GetMetadataForProperty时尚未创建容器模型的元数据(当您实现时{同样适用于OnMetadataCreated {1}})。您可以从IMetadatAware访问它的原因是创建所有元数据的过程已经完成。