Поддерживают ли провайдеры метаданных модели в ASP.NET MVC 3 динамические метаданные?

Я пытаюсь реализовать некоторые пользовательские метаданные модели в ASP.NET MVC 3. Я не могу использовать атрибуты аннотации данных, поскольку некоторые из метаданных могут меняться в зависимости от настроенных значений, поэтому мне нужно решение, которое позволит мне установить метаданные на каждый запрос. Я читал о поставщиках пользовательских метаданных модели, но не могу найти ничего о поддержке сценариев динамических метаданных.

Кэширует ли инфраструктура MVC метаданные от поставщика метаданных модели, или метод CreateMetadata будет вызываться при каждом запросе? Является ли поставщик метаданных пользовательской модели хорошим решением для динамических метаданных, или я должен просто поместить его в модель представления?

Изменить: это не обязательно метаданные проверки, о которых я говорю, поэтому я не ищу решение для конкретной проверки. Это могут быть просто метаданные, которые будут отображаться или использоваться представлением (например, в атрибутах данных HTML 5).

Другим примером может быть метка поля, управляемая базой данных. Обычно можно использовать свойство Name атрибута Display, но это не сработает, если вы хотите динамически установить отображаемое имя на основе значения в базе данных.

1 ответ

Решение

Вы можете получить свой пользовательский провайдер из DataAnnotationsModelMetadataProvider так что вы унаследуете все базовое поведение.

Да, CreateMetadata вызывается при каждом запросе, так что вы можете сделать что-то необычное, например, перейти в БД и загрузить некоторые данные, которые могут со временем измениться.

Для меток я бы реализовал собственный ResourceProvider, который использует Db в качестве источника метки (в зависимости от текущей культуры / аккаунта и т. Д.). Пример приведен здесь: http://www.codeproject.com/Articles/14190/ASP-NET-2-0-Custom-SQL-Server-ResourceProvider

Другие вопросы по тегам