2012-02-15 48 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()