2012-02-15 50 views
0

我想基于CachedDataAnnotationsModelMetadataProvider使用修改后的MetadataProvider。在我的自定义元数据中,我将数据提供到附加值字典中。当我从提供程序中查看缓存时,它会使用ModelMetadata对象正确填充,并且这些对象会使用附加值正确填充。ASP.MVC CachedDataAnnotationsModelMetadataProvider不维护附加值

在我的自定义提供商,我重写:

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

,我通过在字典中的add方法的供应商范围内设定值。

但是,当我从View访问ModelMetadata时,不再填充其他数据。 ModelMetadata中的其他属性被填充,但附加的数据字典不是。如果将自定义元数据提供程序切换为使用标准DataAnnotations元数据提供程序而不是缓存提供程序,则会正确填充其他值。

当我深入到MVC代码,它看起来好像方法CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata原型,Func键modelAccessor)不完全填充回报CachedDataAnnotationsModelMetadata对象。我通过覆盖方法解决了这个问题,但是这看起来有点奇怪,并且导致我相信我错误地使用了Cached提供程序。那么,有没有一种不同的首选方式来处理缓存提供程序中的ModelMetadata?

+0

码?.......... – 2012-02-16 06:53:05

回答

1

使用CreateMetadataFromPrototype() insted的的CreateMetadataPrototype()