我正在尝试在ASP.NET MVC 3中实现一些自定义模型元数据。我无法使用数据注释属性,因为某些元数据可能会根据配置的值进行更改,所以我需要一个可以让我设置的解决方案每个请求的元数据。我一直在阅读有关自定义模型元数据提供程序的信息,但我找不到任何有关动态元数据方案支持的信息。
MVC框架是否缓存来自模型元数据提供程序的元数据,还是会在每个请求上调用CreateMetadata方法?自定义模型元数据提供程序是动态元数据的良好解决方案,还是应该将其放在视图模型中?
编辑:这不一定是我正在讨论的验证元数据,所以我不是在寻找特定于验证的解决方案。它可以只是视图显示或使用的元数据(例如,在HTML 5数据属性中)。
另一个例子可能是数据库驱动的字段标签。通常可以使用Display属性的Name属性,但如果要根据数据库中的值动态设置显示名称,则无法使用此属性。
答案 0 :(得分:3)
您可以从DataAnnotationsModelMetadataProvider
派生自定义提供程序,以便继承所有基本行为。
是的,每次请求都会调用CreateMetadata
,因此您可以做一些奇特的事情,例如转到数据库并加载一些可能会及时更改的数据。
对于标签,我会实现使用Db作为标签来源的自定义ResourceProvider(基于当前的文化/帐户等)示例在这里:http://www.codeproject.com/Articles/14190/ASP-NET-2-0-Custom-SQL-Server-ResourceProvider