gpt4 book ai didi

c# - ModelMetadata.Container 属性为空

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:26 25 4
gpt4 key购买 nike

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

enter image description here

但是当重写 GetMetadataForProperty 方法时,在调用基础实现后 Container 属性总是返回 null:

enter image description here

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

enter image description here

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

  1. ModelMetadata.Container 从 GetMetadataForProperty 返回空值是预期的行为还是错误?

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

  3. ModelMetadata.Container 属性何时真正获取其内容?

最佳答案

元数据是从最里面的属性开始创建的,所以容器模型的元数据在 GetMetadataForProperty 被调用时还没有被创建(这同样适用于 OnMetadataCreated 当你实现IMetadataAware)。您可以从 ViewData 访问它的原因是创建所有元数据的过程已经完成。

关于c# - ModelMetadata.Container 属性为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27998083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com