Как я могу проверить сложную модель, используя ASP.NET MVC 2 - PullRequest
4 голосов
/ 25 августа 2010

открытый класс UserModel {[Обязательный (ErrorMessage = "Le nom est Requis.")] [UIHint ("String")] [DataType (DataType.Text)] [DisplayName ("Nom")] публичная строка Lastname {get;задавать;}

        [DataType(DataType.Text)]
        [UIHint("String")]
        [DisplayName("Prénom")]
        public string Firstname { get; set; }

        [Required(ErrorMessage="La spécialité principale est requise.")]
        [DisplayName("Spécialité principale")]
        public Speciality PrimarySpeciality { get; set; }

        [DisplayName("Spécialité secondaire")]
        public Speciality SecondarySpeciality { get; set; }
}

public class SpecialityModel
{
    [Required(ErrorMessage = "La spécialité est requise.")]
    public int Id { get; set; }

    public string Name { get; set; }
}

Как может потребоваться основная специальность, а не вторая?Кажется, что атрибут Required проверяет только обнуляемость, но Specialty никогда не обнуляется.

Редактировать:

После прочтения этого поста http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html я переформулирую свой вопрос: Как я могупредотвращение проверки подчиненных свойств перед основным объектом.Как вы можете видеть, SecondarySpeciality не обязателен, но все еще получает подтвержденную причину DataAnnotation в классе Address.Я думаю, что mvc2 не может работать с проверкой модели.Должен ли я просто пойти с простой моделью?(что означает намного больше картирования, но если это работает ...)

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Чтобы выполнить проверку сложных объектов, вам необходимо реализовать пользовательскую проверку, создав собственный атрибут проверки. Я бы набрал быстрый пример, но у Фила Хаака есть отличная статья по этому адресу:

http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

0 голосов
/ 25 августа 2010

Напишите свой собственный валидатор, в котором вы можете использовать метод Enum.IsDefined, чтобы определить, правильно ли установлено значение Specialty.

Вам просто нужно создать класс RequiredEnumAttribute, который будет производным от ValidationAttribute ипереопределяет IsValid метод.

Пример доступен здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...