MVC3 Проверка итога для списка элементов - PullRequest
1 голос
/ 15 сентября 2011

У меня есть модель просмотра, которая представляет общий счет и список сторон, разделяющих счет.Каждая из сторон, разделяющих счет, получает определенный процент от общей суммы (например: Сторона А получает 50%, Сторона Б получает 20%, Сторона С получает 30%).

Модель выглядит примерно так:

public class BillModel
{
    public int Total { get; set; }
    public List<BillPartyModel> Parties { get; set; }
}

public class BillPartyModel
{
    public string Name { get; set; }
    public int SplitPercentage { get; set; }
}

По сути, я хочу проверить, что SplitPercentage для всех партий составляет ровно 100. У меня изначально было желание добавить пользовательский атрибут проверки к SplitPercentage, но я не уверен, как суммировать всезначения в валидаторе.Могу ли я добавить пользовательский атрибут проверки к Parties в основной модели (и как это будет работать)?Или кто-то знает лучший способ сделать это?

РЕДАКТИРОВАТЬ: Я сделал, как предложено ниже, и закончил с этим (используя DataAnnotationsExtensions для тега EqualTo):

Модель

[EqualTo("TotalPercent", ErrorMessage = "Percentages do not add up to 100%.")]
public int SplitPercentage { get { return this.Allocations.Sum(a => a.Allocation); } }
public int TotalPercent { get { return 100; } }

Просмотр

@Html.HiddenFor(m => m.SplitPercentage)
@Html.ValidationMessageFor(m => m.SplitPercentage)
@Html.EditorFor(m => m.BillPartyModel)

... А затем я просто использую событие JavaScript OnChange, чтобы обновить AllocationTotal в порядкечтобы получить подтверждение на стороне клиента.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011
public int Total { get { return Parties.Sum(p=>p.SplitPercentage); } }

Затем, когда вы проверяете модель, убедитесь, что Total = 100

0 голосов
/ 15 сентября 2011

Вы можете взглянуть на использование пользовательского атрибута проверки и создать шаблон редактора для вашей List<BillPartyModel> см. здесь для демонстрации

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

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