Да. Вы можете унаследовать класс 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
* 1 028 * Пример:
ModelMetadataProviders.Current = new YourModelMetadataProvider();