ASP.MVC CachedDataAnnotationsModelMetadataProvider不维护其他值

时间:2012-02-15 19:13:46

标签: asp.net-mvc

我正在尝试使用基于MetadataProvider的修改后的CachedDataAnnotationsModelMetadataProvider。在我的自定义元数据中,我将数据提供给附加值字典。当我从提供程序中查看缓存时,它会使用ModelMetadata对象正确填充,并且这些对象已正确填充其他值。

在我的自定义提供程序中,我凌驾于:

CreateMetadataPrototype(IEnumerable<Attribute> attributes, Type containerType, Type modelType, string propertyName)

我正在通过字典上的add方法在提供程序中设置值。

但是,当我从View访问ModelMetadata时,不再填充其他数据。

填充ModelMetadata中的其他属性,但不填充附加数据字典。

如果我将自定义metadataprovider切换为使用标准DataAnnotations元数据提供程序而不是缓存提供程序,则会正确填充其他值。

当我深入研究MVC代码时,它看起来好像是方法

CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor) 

未完全填充返回的CachedDataAnnotationsModelMetadata对象。

我通过覆盖方法来解决这个问题,但这看起来有点奇怪,让我相信我错误地使用了缓存提供程序。

在缓存的提供程序中处理ModelMetadata是否有不同的首选方法?

1 个答案:

答案 0 :(得分:2)

使用CreateMetadataFromPrototype()代替CreateMetadataPrototype()