Поддержка вложенной модели и проверки класса с ASP.NET MVC 2.0

Я пытаюсь проверить модель, содержащую другие объекты с правилами проверки с помощью Системы. ComponentModel. Атрибуты DataAnnotations надеялись, что реализация MVC по умолчанию будет достаточна:

var obj = js.Deserialize(json, objectInfo.ObjectType);
if(!TryValidateModel(obj))
{
    // Handle failed model validation.
}

Объект состоит из типов примитивов, но также и содержит другие классы, которые также используют DataAnnotications. Как так:

public class Entry
{
    [Required]
    public Person Subscriber { get; set; }

    [Required]
    public String Company { get; set; }
}

public class Person
{
    public String FirstName { get; set;}

    [Required]
    public String Surname { get; set; }
}

Проблема состоит в том, что проверка MVC ASP.NET только спускается по 1 уровню и только оценивает свойства высокоуровневого класса, как может быть считан на digitallycreated.net/Blog/54/deep-inside-asp.net-mvc-2-model-metadata-and-validation.

Кто-либо знает изящное решение этого? Я попробовал xVal, но они, кажется, используют нерекурсивный шаблон (http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/).

Кто-то, должно быть, столкнулся с этой проблемой перед правом? Вложенные объекты в Вашей модели не кажутся настолько странными при разработке веб-сервиса.

6
задан Diep-Vriezer 9 June 2010 в 13:58
поделиться

1 ответ

Я предлагаю изучить Fluent Validation из codeplex. Правила проверки содержатся в отдельном классе (аналогично тому, как работают NHibernate и Fluent NHibernate). Один использует лямбда, чтобы указать свойство для проверки, поддерживая дочерние свойства.

`

public class MaintainCompanyViewModelValidator : AbstractValidator<MaintainCompanyViewModel>
    {
        public MaintainCompanyViewModelValidator()
        {
            RuleFor(model => model.Company.ShortName)
                .NotEmpty();
        }

`

1
ответ дан 17 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: