Могу ли я добавить атрибуты DataAnnotation MVC 2 к существующим свойствам?

StackOverflow https://stackoverflow.com/questions/1882338

Вопрос

Я использую сгенерированный класс в качестве модели и хочу добавить атрибуты DataAnnotation к некоторым его свойствам.Поскольку это сгенерированный код, я не хочу добавлять аннотации напрямую.Есть ли другой способ прикрепить их к собственности?

Я рассматривал возможность сделать модель интерфейсом и использовать частичный класс, чтобы сгенерированный класс подписался на него.Есть ли менее сложное решение, если предположить, что оно вообще сработает?

Это было полезно?

Решение

Да, есть.Вам необходимо создать класс метаданных, который будет иметь те же свойства, что и исходная модель, и подключить его к вашей модели с помощью атрибута MetadataType:

[MetadataType(typeof(MyModelMetadata))]
public partial class OriginalMyModel
{
}

public class MyModelMetadata
{
    [Required]
    public string MyProperty;  

    // ...
}

В приведенном выше примере OriginalModel — это ваш собственный класс модели, а MyModelMetadata — это класс, используемый только для аннотирования свойств.MyModelMetadata должна иметь те же свойства, что и ваша модель.

Другие советы

Вы можете использовать атрибут MetadataType в своем классе:

http://msdn.microsoft.com/en-us/library/system.comComponentmodel.dataannotations.metadatatypeattribute.aspx

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

я использовал Свободная проверка, который очень легко подобрать и начать использовать.Существует даже Fluent Validation для xVal часть интеграции в Fluent Validation 2.0 (все еще в бета-версии), которую вы можете использовать в своем проекте для проверки на стороне клиента.

Fluent Validation позволяет вам определить проверку в отдельном классе.Все, что вам нужно сделать, это добавить атрибут к сгенерированному классу, сообщающий ему, какой валидатор использовать, что можно сделать с помощью частичных классов.

В качестве альтернативы вы можете создать модели для конкретного представления, которые сопоставляются с вашей моделью предметной области и содержат ваши аннотации к данным.В этом случае упростите обратное сопоставление, используя что-то вроде АвтоМаппер.Затем, если ваша модель предметной области изменится, вы получите ошибки времени компиляции по сравнению с подходом с метаданными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top