我正在编写一个自定义的ModelMetadataProvider
,它扩展了默认的DataAnnotationsModelMetadataProvider
。不幸的是我遇到了一个问题:
ModelMetadata.Container
属性始终为 null。根据ModelMetadata Class
的msdn描述,当model表示属性时,容器属性不应该为null:
但是当重写 GetMetadataForProperty
方法时,在调用基本实现 Container 属性后始终返回 null:
protected override ModelMetadata GetMetadataForProperty(
Func<object> modelAccessor,
Type containerType,
PropertyDescriptor propertyDescriptor)
{
ModelMetadata metadata = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
// metadata.Container always null here
}
另一方面,当从 ViewData
访问 ModelMetadata
时,Container
属性将按预期填充:
因此我有几个与此问题相关的问题:
ModelMetadata.Container 从
GetMetadataForProperty
返回空是预期行为还是一个错误?有没有办法在 ModelMetadataProvider 中填充
ModelMetadata.Container
属性?ModelMetadata.Container 属性何时真正获取其内容?
最佳答案
元数据是从最里面的属性创建的,因此在调用 GetMetadataForProperty
时容器模型的元数据尚未创建(这同样适用于当您调用 OnMetadataCreated
时实现IMetadatAware
)。您可以从 ViewData
访问它的原因是创建所有元数据的过程已经完成。
关于c# - ModelMetadata.Container 属性为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27998083/