首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelMetadata.Container属性为空

ModelMetadata.Container属性为空
EN

Stack Overflow用户
提问于 2015-01-17 09:29:26
回答 1查看 1.1K关注 0票数 2

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

但是,当重写GetMetadataForProperty方法时,在调用基本实现容器属性之后,总是以null的形式返回:

代码语言:javascript
复制
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属性按预期填充:

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

  1. 这是ModelMetadata.Container从GetMetadataForProperty返回空的预期行为还是一个bug?
  2. 有办法在ModelMetadata.Container中填充ModelMetadataProvider属性吗?
  3. 当ModelMetadata.Container属性真正获得它的内容时?
EN

回答 1

Stack Overflow用户

发布于 2015-01-17 09:52:44

元数据是从最内部的属性中创建的,因此在调用GetMetadataForProperty时还没有创建容器模型的元数据(在实现IMetadatAware时同样适用于IMetadatAware)。您可以从ViewData访问它的原因是创建所有元数据的过程已经完成。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27998083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档