валидация .net mvc 2: суммирование значений нескольких атрибутов - PullRequest
0 голосов
/ 26 июня 2011

Я использую .NET 4 MVC 2 в моем проекте.В основном у меня есть два класса, которые я использую для проверки.Класс A - это моя (основная) модель, класс B - составной атрибут, который может иметь класс A.Код выглядит следующим образом:

[Bind(Exclude = "A_ID")]
    public class A_Validation
    {
        [Required(ErrorMessage = "something is missing")]
        public string title { get; set; }

        // some more attributes ...

        public B b { get; set; }
    }

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

[Bind(Exclude = "B_ID")]
    public class B_Validation
    {
        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int first { get; set; }

        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int second { get; set; }

        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int third { get; set; }
    }

Я могу проверить диапазоны из трех атрибутов B first секунда и третья . Кроме того, я хочу проверить, является ли сумма всех трех атрибутов первый , второй и третий ниже определенного порога.

Есть идеи, как поступить?

Я думаю, что ViewModels могут помочь, но у меня нет опыта их использования.

1 Ответ

0 голосов
/ 26 июня 2011

Вы пытались написать пользовательский атрибут проверки:

public class SumBelowAttribute : ValidationAttribute
{
    private readonly int _max;
    public SumBelowAttribute(int max)
    {
        _max = max;
    }

    public override bool IsValid(object value)
    {
        var b = value as B_Validation;
        if (b != null)
        {
            return b.first + b.second + b.third < _max;
        }
        return base.IsValid(value);
    }
}

и затем украсьте свойство B этим атрибутом:

[SumBelow(123)]
public B b { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...