我正在编写一个ModelMetadataProvider
扩展 default的自定义DataAnnotationsModelMetadataProvider
。不幸的是,我遇到了一个问题:
ModelMetadata.Container
property 始终为 null。根据 msdn 的描述ModelMetadata Class
,当 model 表示一个属性时,容器属性不应该为空:
但是在覆盖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
}
另一方面,当从 访问ModelMetadata
时ViewData
,Container
属性按预期填充:
因此,我有几个与此问题相关的问题:
ModelMetadata.Container 返回空的行为是预期的行为
GetMetadataForProperty
还是错误?有没有办法
ModelMetadata.Container
在 ModelMetadataProvider 中填充属性?ModelMetadata.Container 属性何时真正获取它的内容?