是的。你可以继承ModelMetadataProvider类:
public class LocalizedModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType,
Func<object> modelAccessor, Type modelType, string propertyName)
{
var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
if (containerType == null || propertyName == null)
return metadata;
// Load all metadata from your database here.
return metadata;
}
}
我正在创建一个名为 Griffin.MvcContrib 的项目,该项目即将完成,并且有一个管理区域,您可以在其中处理模型和验证消息的所有本地化(零代码)。
通过使用它,您只需实现以下接口即可获得对数据库的支持:
// the actual code file has detailed explanations of each method.
public interface ILocalizedStringProvider
{
string GetModelString(Type model, string propertyName);
string GetModelString(Type model, string propertyName, string metadataName);
string GetValidationString(Type attributeType);
string GetEnumString(Type enumType, string name);
}
更新
哪里不重要。而且您不必在模型上使用 DataAnnotation 属性([Display] 属性)。我只是继承了DataAnnotationsModelMetadataProvider 才能使用这些属性。
- 在任何地方创建类。
- 从数据库中读取
- 配置 MVC 以在 global.asax 中使用它
例子:
ModelMetadataProviders.Current = new YourModelMetadataProvider();