【发布时间】:2018-02-14 12:01:39
【问题描述】:
我正在编写一个自定义的ModelMetadataProvider,它扩展了默认的DataAnnotationsModelMetadataProvider。不幸的是我遇到了一个问题:
ModelMetadata.Container 属性始终为空。根据ModelMetadata Class的msdn描述,model代表属性时容器属性不能为空:
但是当覆盖GetMetadataForProperty方法时,调用base implementation 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 属性何时真正获取它的内容?
【问题讨论】:
标签: c# asp.net asp.net-mvc modelmetadata modelmetadataprovider